2017-08-30 58 views
0

我有以下查询/投影,在从我的数据集检索数据的工作原理: 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”匹配。春天JPA:查询注释字段中选择不工作的Mongo的查询

我想这个查询添加到我的春节,仓库,所以我创建了以下内容:

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

这是行不通的。我找回一个文档,其中除文档ID之外的所有内容都为空。但是,如果我删除“fields”属性,则会返回整个文档。它看起来像“值”选择器是好的,但“字段”选择器有问题。 JPA不支持$ elemMatch语法吗?根据javadoc:"Both attributes allow using a placeholder notation of ?0, ?1 and so on",所以我不认为这应该是问题。

+0

这对我的作品。你可以将'LibraryList'和'Library' pojo添加到帖子中吗? – Veeram

回答

0

我还没有能够为直接解决方案设计一个修复程序,但由于此问题尚未收到任何回复,因此我认为我会为此发布我的解决方法。

我不得不创建一个独立的存储设备类,并使用下面的查询来构造选择和投影:

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