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

sha*_*bby 2 mongodb spring-data mongodb-query spring-boot

我正在尝试运行此查询

{campaignId: ObjectId('5a6b11e806f0252e1408e379'),'options.path': 'NT'}
Run Code Online (Sandbox Code Playgroud)

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

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

我得到这个例外:

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

使用spring-boot版本1.5.9.RELEASE,而不是越野车版本

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Afr*_*idi 5

尝试这个:

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

或简单地说:

public Dialog findByCampaignIdAndOptionsPath(String id, String path);
Run Code Online (Sandbox Code Playgroud)

如果Option是嵌入式文档

  • 它应该是`findByCampaignIdAndOptions_Path` (2认同)