1

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

但是,当我使用带有 Java 驱动程序的 Mongo 类并运行查询时,它按预期工作。IE:dbCollection.find(Query.query(Criteria.where("id").is("5X")).getQueryObject()));

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

4

2 回答 2

3

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

如果您只需要通过 id 查找文档,如果您使用 Spring 或执行类似操作,为什么不使用类似findById(id)in mongoTemplate 的内容:

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");
于 2013-03-05T16:16:00.477 回答
0

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

import org.springframework.data.mongodb.core.mapping.Field;
...
@Field("id") 
public int id;
于 2017-03-11T08:26:59.080 回答