Java MongoOperations“;id";选择器返回空值
我使用的是Spring data mongodb 1.1.1.RELEASE中的MongoOperations接口,任何使用“id”作为选择器的查询都会返回null: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())
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
字段?我仍在搜索答案:(