MongoRepository findByThisAndThat带有多个参数的自定义@Query

时间:2018-01-26 11:01:17

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

我正在尝试运行此查询

{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 ,而不是bug version

EDIT1:根据评论

中的建议指定了确切的ID名称

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;
    }
}

1 个答案:

答案 0 :(得分:5)

试试这个:

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

或者简单地说:

public Dialog findByCampaignIdAndOptionsPath(String id, String path);

如果Option是嵌入式文档