向 MongoDB 集合中的每个文档添加新字段
本文将讨论 $set 和 $setOnInsert 操作。 此外,MongoDB中集合中添加字段的问题也使用这两个操作符进行了简要说明。
MongoDB 中的 $set 运算符
$set 运算符将字段的值更改为提供的值。 $set 运算符表达式如下所示:{ $set: { <field1>: <value1>, ... } }
。
使用点符号在嵌入文本或数组中定义 <field>
。
$set 运算符的行为
从 MongoDB 5.0 开始,更新运算符以字典顺序处理具有基于字符串的名称的文档字段。 以数字命名的字段按数字顺序处理。
如果该字段不存在,$set 将创建一个具有请求值的字段,只要新字段不打破类型限制。 如果您为不存在的字段提供点路径,$set 将根据需要构造嵌入文档以完成点路径。
如果您提供多个字段值对,$set 将更新或创建每个字段。
当您在 MongoDB 5.0 中使用带有空操作数表达式 ({}
) 的 $set 等更新运算符时,mongod 不再抛出错误。 由于更新为空,因此没有修改,也没有产生 oplog 记录(意味着该操作是空操作)。
例如,让我们创建衣服系列:
db.clothes.insertOne(
{
_id: 100,
quantity: 250,
instock: true,
reorder: false,
details: { model: "14RR", make: "Clothes" },
tags: [ "apparel", "clothing" ],
ratings: [ { by: "Customer127", rating: 5 } ]
}
)
设置顶级字段 以下过程使用 $set 运算符更改满足条件 _id
等于 100 的文档的数量、详细信息和标签字段的值。
db.clothes.updateOne(
{ _id: 100 },
{ $set:
{
quantity: 400,
details: { model: "2600", make: "Fashionables" },
tags: [ "coats", "outerwear", "clothing" ]
}
}
)
该操作更新以下内容:
- 数量值到 400。
- 新嵌入文档的详细信息字段。
- 使用新数组标记字段。
该文档现在具有以下值:
{
_id: 100,
quantity: 400,
instock: true,
reorder: false,
details: { model: '2600', make: 'Fashionables' },
tags: [ 'coats', 'outerwear', 'clothing' ],
ratings: [ { by: 'Customer127', rating: 5 } ]
}
在嵌入式文档中设置字段
使用点符号表示嵌入文本或数组中的 <field>
。 以下操作修改满足条件 _id
等于 100 的文档的详细信息文档中的 make 字段:
db.clothes.updateOne(
{ _id: 100 },
{ $set: { "details.make": "Kidz" } }
)
更新后,文档现在具有以下值:
设置数组中的元素
使用点符号表示嵌入文本或数组中的 <field>
。
以下操作修改 tags 字段中的值第二个元素和 ratings 数组第一个元素中的 ratings 字段,以满足条件 _id
等于 100 的文档。
db.clothes.updateOne(
{ _id: 100 },
{ $set:
{
"tags.1": "rain wear",
"ratings.0.rating": 3
}
}
)
更新后,文档现在具有以下值:
MongoDB 中的 $setOnInsert 运算符
如果文档由于更新操作而插入,upsert: true
,则 $setOnInsert 将提供的值应用于文档中的字段。 如果更新操作没有导致插入,**$setOnInsert** 什么都不做。
可以指定 ups****ert 选项。
$setOnInsert 运算符的行为
从 MongoDB 5.0 开始,更新运算符以字典顺序处理具有基于字符串的名称的文档字段。 以数字命名的字段按数字顺序处理。
当您在 MongoDB 5.0 中使用带有空操作数表达式 ({}
) 的 $setOnInsert 等更新运算符时,mongod 不再抛出错误。 由于更新为空,因此没有修改,也没有产生 oplog 记录(意味着该操作是空操作)。
例如,衣服集合不包含文档。 我们将使用带有 upsert: true
参数的 db.collection.updateOne()
插入一个新文档。
db.clothes.updateOne(
{ _id: 1 },
{
$set: { item: "banana" },
$setOnInsert: { defaultQty: 100 }
},
{ upsert: true }
)
<query>
被 MongoDB 使用来创建一个带有 _id: 1
标识符的新文档。 $setOnInsert 对文档进行请求的更改。
在衣服集合中找到新插入的文件:
{ "_id" : 1, "item" : "banana", "defaultQty" : 100 }
当 upsert 参数为真时,db.collection.updateOne()
方法:
- 创建一个新文档,
- 应用 $set 操作,
- 应用 $setOnInsert 操作。
如果 db.collection.updateOne()
与现有文档匹配,MongoDB 仅应用 $set 操作。
向 MongoDB 集合中的文档添加新字段
您可以使用以下方法为 MongoDB 集合中的每个文档添加一个新字段。
还显示了将每种方法与具有以下文档的收集团队一起使用的示例:
db.teams.insertOne({team: "United", position: "Defence", points: 31})
db.teams.insertOne({team: "Spurs", position: "Defence", points: 22})
db.teams.insertOne({team: "Palace", position: "Center", points: 19})
db.teams.insertOne({team: "Eagles", position: "Forward", points: 26})
db.teams.insertOne({team: "Lions", position: "Defence", points: 33})
添加没有值的新字段
句法:
db.collection.updateMany({}, {$set:{"new_field": null}})
您可以使用以下代码向集合中的每个现有文档添加一个名为 rebounds 且值为空的新字段:
db.teams.updateMany({}, {$set:{"rebounds": null}})
您可以编写以下查询来查看前几个更新的文档:
db.teams.find().limit(3)
此查询返回以下文档:
添加具有特定值的新字段
句法:
db.collection.updateMany({}, {$set:{"new_field": 10}})
您可以使用以下代码向集合中的每个现有文档添加一个值为 10 的名为 rebounds 的新字段:
db.teams.updateMany({}, {$set:{"rebounds": 10}})
您可以编写以下查询来查看前几个更新的文档:
db.teams.find().limit(3)
此查询返回以下文档:
使用现有字段中的值添加新字段
句法:
db.collection.updateMany(
{},
[
{"$set": {"name": { "$concat": ["$field1", " ", "$field2"]}}}
]
)
您可以使用以下代码添加一个名为 name 的字段,其值是现有字段 team 和 position 的串联。
db.teams.updateMany(
{},
[
{"$set": {"name": { "$concat": ["$team", " ", "$position"]}}}
]
)
您可以编写以下查询来查看前几个更新的文档:
db.teams.find().limit(3)
此查询返回以下文档:
相关文章
比较 MongoDB 中的字段
发布时间:2023/04/21 浏览次数:51 分类:MongoDB
-
在本文中,我们将了解如何比较 MongoDB 中的两个字段。 此外,我们将看到一个相关的示例和解释,以使主题更容易理解。
清除或删除 MongoDB 中的集合
发布时间:2023/04/21 浏览次数:147 分类:MongoDB
-
本篇文章将告诉大家如何删除 MongoDB 数据库中的集合以及删除 MongoDB 中的集合的不同方法。
MongoDB 截断集合
发布时间:2023/04/21 浏览次数:178 分类:MongoDB
-
可以根据需要选择两个选项之一来截断下面的集合。 在今天的文章中,我们将学习如何在 MongoDB 中截断集合。
删除 MongoDB 中的重复项
发布时间:2023/04/21 浏览次数:151 分类:MongoDB
-
在本文中,我们将了解如何删除 MongoDB 中的重复条目,并且我们还将看到一个带有适当解释的示例,以使主题更容易理解。
使用 NodeJS 检查 MongoDB 中是否存在集合
发布时间:2023/04/21 浏览次数:194 分类:MongoDB
-
在本文中,我们将检查 MongoDB 数据库中是否存在一个集合,并且我们还将查看与主题相关的示例,以使主题更容易理解。 为此,我们将使用 Node.js。
MongoDB 中的唯一索引
发布时间:2023/04/21 浏览次数:144 分类:MongoDB
-
在这篇教学文章中,您将了解唯一索引、它们是什么以及如何在 MongoDB 中使索引唯一。 此外,还简要详细地解释了使用户的电子邮件在 MongoDB 中唯一。
在 MongoDB 中创建索引
发布时间:2023/04/21 浏览次数:104 分类:MongoDB
-
索引有助于有效解决查询。 如果没有索引,MongoDB 必须遍历集合中的每个文档才能找到与查询匹配的文档。因此,在今天的文章中,我们将学习如何在 MongoDB 中创建索引。
MongoDB 中的稀疏索引
发布时间:2023/04/21 浏览次数:142 分类:MongoDB
-
在本文中,我们将讨论 MongoDB 中的稀疏索引。 此外,我们将提供一个相关示例并进行解释,以使该主题更容易理解。