MongoOperations“ID”选择返回null

问题描述:

我使用的弹簧数据的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

原因是没有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

它不喜欢名称为“id”的非文档ID的字段。使用@Field(“id”)注释将其映射到类中。

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