向 MongoDB 集合中的每个文档添加新字段

发布于 2024-12-08 22:53:35 字数 107 浏览 0 评论 0原文

如何向现有集合中的每个文档添加新字段?

我知道如何更新现有文档的字段,但不知道如何向集合中的每个文档添加新字段。如何在 mongo shell 中执行此操作?

How can I add a new field to every document in an existent collection?

I know how to update an existing document's field but not how to add a new field to every document in a collection. How can I do this in the mongo shell?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

凉城凉梦凉人心 2024-12-15 22:53:35

与更新现有集合字段相同, $set< /a> 如果指定的字段不存在,将添加新字段。

查看此示例:

> db.foo.find()
> db.foo.insert({"test":"a"})
> db.foo.find()
{ "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "test" : "a" }
> item = db.foo.findOne()
{ "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "test" : "a" }
> db.foo.update({"_id" :ObjectId("4e93037bbf6f1dd3a0a9541a") },{$set : {"new_field":1}})
> db.foo.find()
{ "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "new_field" : 1, "test" : "a" }

编辑:

如果您想向所有集合添加 new_field,则必须使用空选择器,并将 multi 标志设置为 true(最后一个参数)以更新所有文档

db.your_collection.update(
  {},
  { $set: {"new_field": 1} },
  false,
  true
)

< strong>编辑:

在上面的示例中,最后 2 个字段 false, true 指定 upsertmulti 标志。

Upsert:如果设置为 true,则在没有文档与查询条件匹配时创建新文档。

Multi: 如果设置为 true,则更新满足查询条件的多个文档。如果设置为 false,则更新一份文档。

这适用于 2.2 之前的 Mongo 版本。对于最新版本,查询发生了一些变化

db.your_collection.update({},
                          {$set : {"new_field":1}},
                          {upsert:false,
                          multi:true}) 

Same as the updating existing collection field, $set will add a new fields if the specified field does not exist.

Check out this example:

> db.foo.find()
> db.foo.insert({"test":"a"})
> db.foo.find()
{ "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "test" : "a" }
> item = db.foo.findOne()
{ "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "test" : "a" }
> db.foo.update({"_id" :ObjectId("4e93037bbf6f1dd3a0a9541a") },{$set : {"new_field":1}})
> db.foo.find()
{ "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "new_field" : 1, "test" : "a" }

EDIT:

In case you want to add a new_field to all your collection, you have to use empty selector, and set multi flag to true (last param) to update all the documents

db.your_collection.update(
  {},
  { $set: {"new_field": 1} },
  false,
  true
)

EDIT:

In the above example last 2 fields false, true specifies the upsert and multi flags.

Upsert: If set to true, creates a new document when no document matches the query criteria.

Multi: If set to true, updates multiple documents that meet the query criteria. If set to false, updates one document.

This is for Mongo versions prior to 2.2. For latest versions the query is changed a bit

db.your_collection.update({},
                          {$set : {"new_field":1}},
                          {upsert:false,
                          multi:true}) 
机场等船 2024-12-15 22:53:35

从 MongoDB 版本 3.2 开始,您可以使用 updateMany()

> db.yourCollection.updateMany({}, {$set:{"someField": "someValue"}})

Since MongoDB version 3.2 you can use updateMany():

> db.yourCollection.updateMany({}, {$set:{"someField": "someValue"}})
淡写薰衣草的香 2024-12-15 22:53:35

为了澄清起见,MongoDB 版本 4.0.x 的语法如下:

db.collection.update({},{$set: {"new_field*":1}},false,true)

这是一个工作示例,将 published 字段添加到 articles 集合中,并将该字段的值设置为 >真实

db.articles.update({},{$set: {"published":true}},false,true)

To clarify, the syntax is as follows for MongoDB version 4.0.x:

db.collection.update({},{$set: {"new_field*":1}},false,true)

Here is a working example adding a published field to the articles collection and setting the field's value to true:

db.articles.update({},{$set: {"published":true}},false,true)
神经暖 2024-12-15 22:53:35
db.collection.updateMany({}, {$set: {"fieldName": ""}})

updateMany 要求每个文档都有一个匹配条件,因为我们传递的是 {},所以它始终为 true。第二个参数使用 $set 运算符在每个文档中添加所需字段。

db.collection.updateMany({}, {$set: {"fieldName": ""}})

updateMany requires a matching condition for each document, since we are passing {} it is always true. And the second argument uses $set operator to add the required field in each document.

笨死的猪 2024-12-15 22:53:35

Pymongo 3.9+

update() 现已弃用,您应该使用 replace_one()update_one()update_many() 相反。

就我而言,我使用 update_many() 它解决了我的问题:

db.your_collection.update_many({}, {"$set": {"new_field": "value"}}, upsert=False, array_filters=None)

Pymongo 3.9+

update() is now deprecated and you should use replace_one(), update_one(), or update_many() instead.

In my case I used update_many() and it solved my issue:

db.your_collection.update_many({}, {"$set": {"new_field": "value"}}, upsert=False, array_filters=None)
秋意浓 2024-12-15 22:53:35

如果您使用猫鼬,请在猫鼬连接后尝试此操作

async ()=> await Mongoose.model("collectionName").updateMany({}, {$set: {newField: value}})

if you are using mongoose try this,after mongoose connection

async ()=> await Mongoose.model("collectionName").updateMany({}, {$set: {newField: value}})
ぃ弥猫深巷。 2024-12-15 22:53:35

上面的答案不涵盖这种情况。我一直在寻找类似的查询,但想根据条件将字段添加到几个文档中。

因此,我们可以使用 updateMany 的第一个变量来仅更新少数文档中的字段。

示例:我想向所有 userType 为 Employer 且国家/地区为“AAA”的用户添加可为 null 的字段 isDeprecated?

db.users.updateMany({"userType": "Employer", "country": "AAA"}, {"$set": { "isDeprecated?": true }})  

这个答案在我们必须找到集合然后更新的情况下也会有帮助。我们可以像提到的那样在单个查询中完成此操作。

The answers above does't cover this scenario. I was looking for the similar query but want to add fields to few documents based on condition.

So, we can use first variable of updateMany to update fields only in few documents.

Example: I want to add a nullable field isDeprecated? to all those Users whose userType is Employer and has country "AAA".

db.users.updateMany({"userType": "Employer", "country": "AAA"}, {"$set": { "isDeprecated?": true }})  

This answer will be helpful in those scenarios as well, where we have to find the collection and then update. This can we done in single query like mentioned.

鹿港小镇 2024-12-15 22:53:35

MongoDB 指南针 还可以用于更新集合中的每个文档。

  1. 选择所需的集合并单击更新按钮。
  2. 将出现一个对话框,其中将显示用于设置值的 JSON。
  3. 添加 JSON 格式的值并更新。

<前><代码>{
$设置:{
键名:值
},
}

MongoDB compass can also be used to update every document inside a collection.

  1. Select the desired collection and click on update button.
  2. A dialog box will appear which will show JSON to set the values.
  3. Add the values in JSON format and update.
{
  $set: {
    keyname: value
  },
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文