【问题标题】:MongoOperations "id" selector returning nullMongoOperations“id”选择器返回 null
【发布时间】:2013-02-20 03:02:15
【问题描述】:

我在 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”选择器冲突。有没有人遇到过这个问题,或者有人知道发生了什么吗?

【问题讨论】:

  • 检查您的第二个代码行。在id 之后缺少引号
  • @user2116627 在同一个文档中是否有id_id 字段?
  • 我仍在寻找答案:(

标签: java spring mongodb


【解决方案1】:

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

【讨论】:

  • 作者写道:and the selector "id" should not clash with the "_id" selector
  • 好吧,那他要怎么获取不存在的字段“id”的值呢?
  • “id”字段确实存在,这就是使用 Java Mongodb 驱动程序时查询按预期工作的原因。问题是 MongoTemplate 没有返回正确的结果。所以为了澄清有正常的PK“_id”字段,我的文档中有一个“id”字段。
  • 当“id”和“_id”同时存在时,请提供解决方案。我也面临同样的问题。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2021-12-25
    • 2018-09-03
    • 2020-06-24
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    • 2021-07-05
    相关资源
    最近更新 更多