2015-11-19 94 views
4

我有一個蒙戈查詢我想要實現的春天蒙戈庫春數據蒙戈定製庫查詢與對象ID

db.collection.find({ 'items': 
    { $elemMatch: { 
     'refund.$id' : ObjectId('5638cab2e4b07ff212618d7e') 
     } 
    } 
}) 

我的倉庫界面

@Query("{ 'items': { $elemMatch: { 'refund.$id' : ObjectId(?0) } } }") 
RMA findRMAByItemRefund(String refundId); 

它拋出JSONParseException

Caused by: com.mongodb.util.JSONParseException: 
{ 'items': { $elemMatch: { 'refund.$id' : ObjectId("_param_0") } } } 
            ^
    at com.mongodb.util.JSONParser.parse(JSON.java:216) 
+0

你是不是想參數'refundId'綁定到查詢參數'$退款id'?如果'退款'是另一個實體,你可以嘗試'refund.id',因爲Spring可以自己轉換東西 –

+0

是的。它的作品@JoaoEvangelista Spring處理轉換。非常感謝你 – Whales

回答

2

試試這個

@Query("{ 'items': { $elemMatch: { 'refund.id' : ?0 } } }") 
RMA findRMAByItemRefund(String refundId); 

根據我的經驗,?0應該是獨立的,不能用作mongo函數參數。

另外,是$id您自己的假設或該字段實際上存儲爲$id。如果不是這樣,我將與refund.id

3

去,因爲接受的解決方案並沒有屈服在我的情況下,任何的結果,我必須找到另一種解決方案,那就是:

而是採用通過@Query(...)我所定義的自動生成的查詢功能選擇了手動構建DBObject用於查詢蒙戈,並限定所述的功能中的一個接口執行default,因此保持它「乾淨」 (" - 因爲不得不引入_query方法)

注:此解決方案僅在的Java 1.8工作+

public interface SomeRepository extends MongoRepository<SomeEntity, String> { 

    @Query("{'nestedEntity._id': ?0}") 
    SomeEntity findByNestedEntityId_DoesntWork(String nestedEntityId); 

    @Query("?0") 
    SomeEntity _query(DBObject query); 

    default SomeEntity findByNestedEntityId(String nestedEntityId) { 
     DBObject queryObject = BasicDBObjectBuilder 
      .start("nestedEntity._id", new ObjectId(nestedEntityId)) 
      .get(); 

     return this._query(queryObject); 
    } 
} 
0

我想我的問題是有點不同的,但因爲我無法找到答案的任何地方,我認爲這是值得一提。 基本上我想要做的的ObjectId和用戶id的搜索,所以這裏是我做了什麼:

@Query("{ '_id': ?0, 'userId': ?1 }") 
T findByObjectIdAndUserId(final ObjectId objectId, final Long userId);