如何使用 Java 中的 ObjectID 更新 MongoDB 中的文档

Posted

技术标签:

【中文标题】如何使用 Java 中的 ObjectID 更新 MongoDB 中的文档【英文标题】:How to update a document in MongoDB using ObjectID in Java 【发布时间】: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? 有点相似,但是我在尝试更新文档时没有收到任何错误。它只是不匹配任何东西。

【问题讨论】:

How to query documents using "_id" field in Java mongodb driver?的可能重复 【参考方案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 的。

以上是关于如何使用 Java 中的 ObjectID 更新 MongoDB 中的文档的主要内容,如果未能解决你的问题,请参考以下文章

使用更新 mongoDB 从 objectId 数组中删除

如何更新嵌套数组MongoDb Node js中的必填字段[重复]

从项目数组设置增量值

如何在 Mongoose 中使用 $addToSet 和 ObjectId 数组?

如何使用聚合管道从 mongodb 中的当前字段中减去更新?

如何使用节点 js 更新 mongo 文档中的数组元素?