我在Spring-data-mongodb 1.1.1.RELEASE中使用MongoOperations接口,使用“id”作为选择器的任何查询都返回null:Query.query(Criteria.where("id").is("5X")))
但是,当我使用带有Java驱动程序的Mongo类并运行查询时,它按预期工作。即:dbCollection.find(Query.query(Criteria.where("id").is("5X")).getQueryObject()));
根据我的研究,这应该适用于MongoOperations接口,而选择器“id”不应与“_id”选择器冲突。有没有人遇到过这个问题,或者有人知道发生了什么事?
答案 0 :(得分:3)
原因是没有id
,但有_id
- 尝试一下。在mongodb中,PK默认字段具有“_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");
答案 1 :(得分:0)
它不喜欢名为" id"的字段。这不是文件ID。使用@Field(" id")注释将其映射到类中。
import org.springframework.data.mongodb.core.mapping.Field;
...
@Field("id")
public int id;