2013-03-05 176 views
1

我使用的彈簧數據的MongoDB 1.1.1.RELEASE任何查詢MongoOperations界面使用「身份證」作爲選擇返回null:Query.query(Criteria.where("id").is("5X")))MongoOperations「ID」選擇返回null

然而,當我使用帶有Java驅動程序的Mongo類並運行查詢,它按預期工作。即:dbCollection.find(Query.query(Criteria.where("id").is("5X")).getQueryObject()));

基於我的研究,這應該適用於MongoOperations接口,並且選擇器「id」不應該與「_id」選擇器衝突。有沒有人遇到這個問題,或任何人知道發生了什麼?

+1

檢查你的第二個代碼行。它在'id'後缺少一個報價。 – user 2013-03-05 16:19:45

+0

@ user2116627你在同一個文檔中有'id'和'_id'字段嗎? – n1ckolas 2013-03-05 16:43:59

+0

我仍然在尋找這個答案:( – RafatMunshi 2017-11-01 04:51:00

回答

3

原因是沒有id,但有_id - 試試。在mongodb中,PK默認字段具有「_id」名稱。

如果你需要找到只有身份證件,所以如果你使用Spring你不使用類似findById(id)在mongoTemplate或做這樣的事情:

DBCollection coll = db.getCollection(getCollectionName()); 
DBObject searchById = new BasicDBObject("_id", new ObjectId(idString)); 
DBObject found = coll.findOne(searchById); 

春天蒙戈嘗試:

YourObject obj= mongoTemplate.findOne(new Query(Criteria.where("id").is("5X")), YourObject.class, "yourCollectionName"); 
+0

作者寫道:'和選擇器「ID」不應該與「_id」選擇器' – n1ckolas 2013-03-05 16:17:56

+0

衝突那麼,他是如何得到字段「ID」的價值沒有'是否存在? – user 2013-03-05 16:19:06

+0

「id」字段確實存在,這就是爲什麼查詢在使用Java Mongodb驅動程序時按預期工作的原因。問題是MongoTemplate沒有返回正確的結果,因此爲了說明正常的PK「_id 「字段,並且在我的文檔中有一個」id「字段 – nathanpr 2013-03-05 21:02:26

0

它不喜歡名稱爲「id」的非文檔ID的字段。使用@Field(「id」)註釋將其映射到類中。

import org.springframework.data.mongodb.core.mapping.Field; 
... 
@Field("id") 
public int id;