2017-08-30 90 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);