MongoDB $Set 运算符
通过本文的帮助,您将了解如何使用 $set
运算符部分更新 MongoDB 中的对象,以便新对象与现有对象重叠/合并。
$set 运算符用给定值替换字段的值。 $set
运算符表达式使用以下语法。
{ $set: { <field1>: <value1>, ... } }
您将使用点表示法在嵌入文档或数组中指定一个 <field>
。
MongoDB $set 运算符
如果该字段不存在,只要新字段不违反任何约束,$set
运算符就会创建一个具有指定值的字段。
例如,如果您为不存在的字段提供了一个点路径,$set
运算符将根据需要生成嵌入文档以完成点路径。
此外,如果您指定多个字段值对,$set 运算符将更新或创建每个字段。
您可以创建以下产品集合。
db={
"products": [
{
_id: 100,
quantity: 250,
instock: true,
reorder: false,
details: {
model: "PTI",
make: "Breakout"
},
tags: [
"jeans",
"clothing"
],
ratings: [
{
by: "CustomerIK",
rating: 3
}
]
}
]
}
设置 Top-Level 字段
对于匹配条件 _id
等于 100 的文档,下面的操作使用 $set 运算符来更新 details 字段、quantity 字段和 tags 字段的值。 下面给出了对此的查询。
db.products.update(
{ _id: 100 },
{ $set:
{
quantity: 500,
details: { model: "2600", make: "Outfitters" },
tags: [ "coats", "outerwear", "clothing" ]
}
}
)
上面的操作更新了下面的内容。
- 数量值到 500。
- 带有新嵌入文档的详细信息字段
- 用新数组标记字段
上面查询的结果显示在下面的屏幕截图中。
在嵌入式文档中设置字段
您将使用点符号在嵌入文档或数组中指定 <field>
。 对于匹配条件 _id
等于 100 的文档,以下操作更新详细信息文档中的 make 字段。
下面给出了对此的查询。
db.products.update(
{ _id: 100 },
{ $set: { "details.make": "Breakout Kids" } }
)
上面查询的结果显示在下面的屏幕截图中。
在数组中设置元素
以下操作修改 tags 字段的第二个元素(数组索引为 1)中的值和 ratings 数组的第一个元素(数组索引为 0)中的 rating 字段中满足条件 _id 等于 100 的文档。
下面给出了对此的查询。
db.products.update(
{ _id: 100 },
{ $set:
{
"tags.1": "wind breaker",
"ratings.0.rating": 2
}
}
)
上面查询的结果显示在下面的屏幕截图中。
$set(聚合)
$set(聚合)向文档添加新字段。 $set 输出包含输入文档中所有现有字段和新添加字段的文档。
$set(聚合)具有以下语法。
{ $set: { <newField>: <expression>, ... } }
$set 是一个向现有文档添加新字段的命令。 用户可以在聚合操作中包含一个或多个 $set 阶段。
使用点符号向嵌入文档(包括数组中的文档)添加字段或字段。 使用 $concatArrays
将元素添加到使用 $set 的现有数组字段。
使用两个 $set 阶段
使用以下内容创建示例成绩集合。
db={
"grades": [
{
_id: 1,
student: "Ali",
homework: [10, 8, 9],
quiz: [9, 8],
extraCredit: 3
},
{
_id: 2,
student: "Manahil",
homework: [3, 8, 5],
quiz: [7, 9],
extraCredit: 6
}
]
}
在以下过程中使用两个 $set
阶段将三个新字段添加到输出文档。 下面给出了对此的查询。
db.grades.aggregate( [
{
$set: {
totalHomework: { $sum: "$homework" },
totalQuiz: { $sum: "$quiz" }
}
},
{
$set: {
totalScore: { $add: [ "$totalHomework", "$totalQuiz", "$extraCredit" ] } }
}
] )
该操作返回以下文档,如下面的屏幕截图所示。
向嵌入文档添加字段
使用以下内容创建样本收集传输。
db={
"transport": [
{
_id: 1,
type: "sedan",
specs: { doors: 4, wheels: 4}
},
{
_id: 2,
type: "motorbike",
specs: {doors: 0, wheels: 2}
},
{
_id: 3,
type: "jet ski"
}
]
}
以下聚合操作在嵌入式文档规范中创建一个新字段 fuel_type。 下面给出了对此的查询。
db.transport.aggregate( [
{ $set: { "specs.fuel_type": "super" } }
] )
该操作返回以下结果,如下面的屏幕截图所示。
覆盖现有字段
当 $set 操作指定现有字段名称时,原始字段将被替换。 使用以下项目制作宠物样本集。
db={
"pets": [
{
_id: 1,
dogs: 10,
cats: 5
}
]
}
随后的 $set 操作覆盖了 cats 字段。 下面给出了对此的查询。
db.pets.aggregate( [
{ $set: { "cats": 20 } }
] )
该操作返回以下文档,如下面的屏幕截图所示。
向数组添加元素
使用以下记录创建示例成绩集合。
db={
"grades": [
{
_id: 1,
student: "Ali",
homework: [10, 8, 9],
quiz: [9, 8],
extraCredit: 3
},
{
_id: 2,
student: "Manahil",
homework: [3, 8, 5],
quiz: [7, 9],
extraCredit: 6
}
]
}
用户可以将 $set 运算符与 $concatArrays 表达式一起使用。 这会将一个元素添加到现有的数组字段中。
以下操作使用 $set 将 homework 字段替换为一个新数组,该数组的元素是当前 homework 数组与另一个包含新分数 [ 7 ] 的数组连接而成。 下面给出了对此的查询。
db.grades.aggregate([
{ $match: { _id: 2 } },
{ $set: { homework: { $concatArrays: [ "$homework", [ 7 ] ] } } }
])
该操作返回以下文档,如下面的屏幕截图所示。
在本文中,您学习了如何使用 $set 运算符部分更新 MongoDB 中的对象,以便新对象与现有对象重叠/合并。
相关文章
在 MongoDB Shell 中列出所有数据库
发布时间:2023/05/11 浏览次数:180 分类:MongoDB
-
交互式 Mongo Shell 提供了多个用于获取数据的选项。 本文介绍了在 Mongo Shell 中列出数据库的几种不同方法。
MongoDB 中检查字段包含的字符串
发布时间:2023/05/11 浏览次数:1024 分类:MongoDB
-
这篇文章解决了如何在 MongoDB 中使用正则表达式来确定字段是否包含字符串。在 MongoDB 中使用正则表达式 正则表达式 (regex) 是定义搜索模式的文本字符串。
在 MongoDB 中 upsert 更新插入
发布时间:2023/05/11 浏览次数:214 分类:MongoDB
-
在 MongoDB 中,upsert 结合了更新和插入命令。 它可以在 update() 和 findAndModify() 操作中使用。MongoDB 中的 upsert 查询 upsert 采用单个布尔参数。
如何卸载 MongoDB
发布时间:2023/05/11 浏览次数:745 分类:MongoDB
-
要从您的计算机中卸载 MongoDB,您必须先删除 MongoDB 服务、数据库和日志文件。使用这篇 MongoDB 文章,您将能够从 Ubuntu Linux、Mac 和 Windows 卸载 MongoDB。 请务必保留数据备份,因为一旦卸载,便
在 MongoDB 中存储日期和时间
发布时间:2023/05/11 浏览次数:762 分类:MongoDB
-
本 MongoDB 教程解释了 Date() 对象是什么以及如何使用 Date() 方法对集合进行排序。 这也将帮助您找到在 MongoDB 中显示和存储日期/时间的最佳方法。
MongoDB 按 ID 查找
发布时间:2023/05/11 浏览次数:1856 分类:MongoDB
-
MongoDB 中的 find by Id() 函数用于获取与用户提供的 id 相匹配的文档。 如果找不到与指定 ID 匹配的文档,则返回空值。
检查 MongoDB 服务器是否正在运行
发布时间:2023/05/11 浏览次数:247 分类:MongoDB
-
这篇 MongoDB 教程将告诉您如何检查是否安装了 MongoDB 以及安装的 MongoDB 服务器的版本。 它在 Windows、UBUNTU 和 MAC 等不同的操作系统中实现。
MongoDB 中的分页
发布时间:2023/05/11 浏览次数:174 分类:MongoDB
-
这篇文章将介绍什么是 MongoDB 中的分页。 为什么在 MongoDB 中需要分页以及在 MongoDB 中完成分页的不同方法或方式是什么。
MongoDB 从查询开始
发布时间:2023/05/11 浏览次数:186 分类:MongoDB
-
在这篇 MongoDB 文章中,用户将学习如何使用 $regex 进行开始查询。 它为查询中的模式匹配字符串提供正则表达式功能。