Java MongoOperations“;id";选择器返回空值

Java MongoOperations“;id";选择器返回空值,java,spring,mongodb,Java,Spring,Mongodb,我使用的是Spring data mongodb 1.1.1.RELEASE中的MongoOperations接口,任何使用“id”作为选择器的查询都会返回null:query.query(Criteria.where(“id”).is(“5X”) 但是,当我将Mongo类与Java驱动程序一起使用并运行查询时,它会按预期工作。i、 e.:dbCollection.find(Query.Query(Criteria.where(“id”).is(“5X”)).getQueryObject())

我使用的是Spring data mongodb 1.1.1.RELEASE中的MongoOperations接口,任何使用“id”作为选择器的查询都会返回null:
query.query(Criteria.where(“id”).is(“5X”)

但是,当我将Mongo类与Java驱动程序一起使用并运行查询时,它会按预期工作。i、 e.:
dbCollection.find(Query.Query(Criteria.where(“id”).is(“5X”)).getQueryObject())


根据我的研究,这应该适用于MongoOperations接口,选择器“id”不应该与“_id”选择器冲突。有人遇到过这个问题吗,或者有人知道发生了什么吗?

原因是没有
id
,但是有
\u id
-试试看。在mongodb中,PK默认字段有“\u id”名称

如果您只需要按id查找文档,那么如果您使用Spring或执行类似操作,为什么不在mongoTemplate中使用类似于
findById(id)

DBCollection coll = db.getCollection(getCollectionName());
DBObject searchById = new BasicDBObject("_id", new ObjectId(idString));
DBObject found = coll.findOne(searchById);
在春季,mongo尝试:

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

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

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

作者写道:
选择器“id”不应该与“_id”选择器冲突
那么,他如何获得不存在的字段“id”的值呢?字段“id”确实存在,这就是为什么在使用Java Mongodb驱动程序时,查询会按预期工作的原因。问题是MongoTemplate没有返回正确的结果。因此,为了澄清我的文档中有正常的PK“\u id”字段和“id”字段。请在“id”和“\u id”都存在时提供解决方案。我也面临同样的问题。请检查第二行代码。在
id
@user2116627后面缺少引号。您在同一文档中是否有
id
\u id
字段?我仍在搜索答案:(