【问题标题】:MongoRepository findByThisAndThat custom @Query with multiple parametersMongoRepository findByThisAndThat 具有多个参数的自定义@Query
【发布时间】:2018-07-05 17:12:24
【问题描述】:

我正在尝试运行此查询

{campaignId: ObjectId('5a6b11e806f0252e1408e379'),'options.path': 'NT'}

它在 Compass 中完美运行,但是当我尝试添加 MongoRepository 界面时,如下所示:

@Query("{ 'campaignId': ObjectId(?0), 'options.path': ?1})")
public Dialog findByCampaignIdAndPath(String campaignId, String path);

我得到了这个例外:

嵌套异常是 com.mongodb.util.JSONParseException:
@Query("{ 'campaignId': ObjectId(?0), 'options.path': ?1})")

使用spring-boot版本1.5.9.RELEASE,不是buggyversion

EDIT1:指定了确切的 id 名称,如 cmets 中所建议的那样

EDIT2:这是我的 Dialog 类

@Getter     
@Setter
@Document(collection = "Dialog")
public class Dialog {
    @Id
    public String id;
    private DBRef campaignId;
    private Message message;
    private List<Option> options;

    public Dialog(final Message message, final List<Option> options) {
        this.message = message;
        this.options = options;
    }
}

【问题讨论】:

  • 如果您要指定 id,那么需要指定任何其他查询参数吗?是不是多余的
  • 你是对的,实际上让我重新表述它不是 id,它应该是另一个集合中文档的手动 ref id
  • 显示 Dialog 类的代码

标签: mongodb spring-boot mongodb-query spring-data


【解决方案1】:

试试这个:

@Query("{ 'campaignId': ?0, 'options.path': ?1}")
public Dialog findByIdAndPath(String id, String path);

或者简单地说:

public Dialog findByCampaignIdAndOptionsPath(String id, String path);

如果Option 是嵌入文档

【讨论】:

  • @shabby 检查更新的答案,或为 Dialog 类添加代码。
  • 添加了Dialog类,但是没有返回任何结果,虽然JSON解析异常消失了
  • 应该是findByCampaignIdAndOptions_Path
  • @pvpkiran 检查这个,它显示了如何通过嵌入文档的字段来查找:docs.spring.io/spring-data/jpa/docs/current/reference/html/…
  • @shabby 在您的对话框中,campaignId 是 DBRef 的对象。为什么不应该是一个简单的 String 对象?或者这个对象中还有其他信息吗?
猜你喜欢
  • 2015-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-22
  • 2013-08-03
  • 2018-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多