Spring JPA:Query Annotation字段选择不适用于Mongo Query

时间:2017-08-30 14:00:12

标签: spring mongodb jpa

我有以下查询/投影用于从我的数据集中检索数据: db.library.find({ party_id: 'TEST_PARTY_ID', contract_id : 'TEST_CONTRACT_ID' }, { library_list: { $elemMatch: { book_code: 'TST_BOOK_CODE' } } }) 换句话说:通过party_id和contract_id查找所有文档,并返回library_list数组中的library_list元素,其中书籍代码匹配' TST_BOOK_CODE'。

我想将此查询添加到我的Spring Repository,因此我创建了以下内容:

@Query(value="{party_id: ?0, contract_id : ?1}", fields="{'library_list': {$elemMatch: {'book_code': ?2}}}")
Library findLibraryByPartyAndContractAndBookCode(String partyId, String contractId, String bookCode);

这不起作用。我收到一份文件,其中除文件ID外,一切都为空。如果我删除"字段"但是,我得到了整个文档。它看起来像"值"选择器很好,但是"字段"存在问题。选择。 JPA不支持$ elemMatch语法吗?根据javadoc:"Both attributes allow using a placeholder notation of ?0, ?1 and so on",所以我认为不应该是问题。

1 个答案:

答案 0 :(得分:0)

我无法为直接解决方案设计修复但是,由于这个问题没有收到任何回复,我想我会为此发布我的解决方法。

我必须创建一个单独的存储库类,并使用以下Query来构造选择和投影:

Query q = new Query().addCriteria(Criteria.where("party_id")
        .is(partyId)
    .and("contract_id").is(cardId));
q.fields()
    .elemMatch("library_list", Criteria.where("book_code").is(preferenceCode));

List<LibraryList> ret = mongoTemplate.find(q, LibraryList.class);