【问题标题】:How to update a document in MongoDB using ObjectID in Java如何使用 Java 中的 ObjectID 更新 MongoDB 中的文档
【发布时间】:2016-01-01 05:01:02
【问题描述】:

我在这里想要完成的事情非常简单。我正在尝试更新 MongoDB 集合中的单个文档。当我使用任何字段(例如“名称”)查找文档时,更新查询成功。这是查询:

mongoDB.getCollection("restaurants").updateOne(
    new BasicDBObject("name", "Morris Park Bake Shop"),
    new BasicDBObject("$set", new BasicDBObject("zipcode", "10462"))
);

如果我尝试使用 ObjectId 查找文档,它永远不会工作,因为它与任何文档都不匹配。

mongoDB.getCollection("restaurants").updateOne(
    new BasicDBObject("_id", "56110fe1f882142d842b2a63"),
    new BasicDBObject("$set", new BasicDBObject("zipcode", "10462"))
);

是否可以使此查询与对象 ID 一起使用?

我同意我的问题与How to query documents using "_id" field in Java mongodb driver? 有点相似,但是我在尝试更新文档时没有收到任何错误。它只是不匹配任何东西。

【问题讨论】:

标签: java mongodb mongodb-query


【解决方案1】:

您当前正在尝试基于字符串而不是 ObjectId 进行更新。

确保在构建查询时从字符串中初始化一个新的 ObjectId:

mongoDB.getCollection("restaurants").updateOne(
    new BasicDBObject("_id", new ObjectId("56110fe1f882142d842b2a63")),
    new BasicDBObject("$set", new BasicDBObject("zipcode", "10462"))
);

【讨论】:

  • 我错过了。感谢您的帮助,问题已解决!
【解决方案2】:

@sheilak 的回答是最好的,但是,

如果您希望它采用字符串格式,您可以使用 {"_id", {"$oid","56110fe1f882142d842b2a63"}} 作为更新查询的过滤器

【讨论】:

  • 你能解释一下我如何使用下面的文档来更新一个:- { "_id": { "$oid": "6148079b34f0a9e6mhghkgjvjh" }, "CUST_CODE": "in1", "name": "emp1", "designation": "tester", "address": { "Street": "main1", "country": "CN" } }
【解决方案3】:

将字符串转换为objectid:

from bson.objectid import ObjectId
db.collection.find_one({"_id":ObjectId('5a61bfadef860e4bf266edb2')})

{u'_id': ObjectId('5a61bfadef860e4bf266edb2'), ...

【讨论】:

  • 您能否说明一下您在那里做什么?并且请在你应该使用代码格式的地方我什至不确定如何整理这个答案
  • 看起来像 Python。问题是关于 Java 的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
  • 2023-04-02
  • 1970-01-01
相关资源
最近更新 更多