MongoDB 中 $push 和 $addToSet 的区别
本文解释了 MongoDB 中的运算符。 $push 和 $addToSet 运算符的用途是什么。
此外,这两个运算符之间的区别在代码段中给出。 本文讨论以下主题。
- MongoDB 中的运算符
- $在 MongoDB 中推送
- MongoDB 中的 $addToSet
MongoDB 中的运算符
运算符是通知编译器或解释器执行数学或逻辑运算的特殊符号或关键字。
查询运算符允许开发人员创建复杂的查询以与匹配其应用程序的数据集进行交互,从而增强了 MongoDB 的功能。
下面解释了 MongoDB 中不同类型的运算符。
- 查询和投影运算符 - 查询运算符有助于发现数据库中的数据,而投影运算符会改变数据的显示方式。
- 更新操作员 - 更新操作员允许您更改或添加数据到您的数据库。
- 聚合管道阶段 - 聚合管道的可用聚合阶段。
- Aggregation Pipeline Operators - 聚合管道操作有一组操作符可用于在管道阶段定义和操作文档。
- 查询修饰符——查询修饰符决定查询将如何执行。
MongoDB 中的 $push 运算符
MongoDB 中的 $push 运算符用于将给定值附加到数组。 $push 运算符是一种更新运算符。
如果要更新的文档中不存在指定字段,则 $push 运算符将其添加为新字段,并将指定值作为其元素。 如果更新字段不是数组类型,则操作失败。
如果该值是一个数组,则 $push 运算符在更新时将整个数组作为单个元素附加。 如果您希望单独添加每个值元素,请使用带有 $each 修饰符的 $push 运算符。
语法:
db.collection.update( <query>,{ $push: { <field>: <value> } })
以下数据库集合将在所有示例中使用。
简单集合:
db={
"student": [
{
"_id": 1,
"sem": 1,
"subjects": [
"phys",
"chem",
"maths",
"gkn",
"stat",
"astro"
],
"achieve": [
70,
87,
90,
90,
65,
81
]
}
]
}
MongoDB $push 运算符示例
如果要在条件主题为“maths”时完成的数组字段追加95,我们可以使用下面的MongoDB命令。
db.student.update( { "subjects" : "maths" },{ $push: { "achieve": 95 } });
因为前面示例中描述的条件与此操作匹配,所以值 95 将附加到已完成的数组中。
查看最新更新的文档:
db.student.find().pretty();
上面给出的查询的输出可以在这个截图中看到。
当字段不是数组时 MongoDB $push 的例子
如果你想在不是数组类型字段的sem列上加2,我们可以使用下面的MongoDB命令。
db.student.update( { "subjects" : "maths" },{ $push: { "sem": 2 } });
因为上面例子中的sem字段不是数组类型,所以会运行失败,产生如下结果。
Cannot apply $push/$push All modifier to non-array
MongoDB $push 使用 $each 修饰符的例子
如果我们想将许多条目或多个元素 (77、49、83) 附加到为条件科目为“数学”的记录学生完成的数组,我们可以使用下面的 MongoDB 命令。
db.student.update( { "subjects" : "maths" },{ $push: { "achieve": {$each : [77,49,83 ]} } });
$each 修饰符在上面的示例中用于将多个条目 77、49、83 附加到与标准主题“maths”匹配的数组完成。
查看最新更新的文档:
db.student.find().pretty();
上面给出的查询的输出可以在这个截图中看到。
MongoDB 中的 $addToSet
$addToSet
运算符仅在数组中不存在值时才将值添加或附加到数组。 当值已经在数组中时,$addToSet 返回相同的数组而不改变它。
$addToSet
运算符确保更新时数组中没有重复条目; 但是,可以在添加值后修改显示中元素的顺序。
语法:
db.collection.update( { <field>: <value> }, { $addToSet: { <field>: <addition> } } );
上面使用的集合:
{ "_id" : 1, "sem" : 1, "achieve" : [ 80, 70, 90 ] }
$addToSet 附加值的示例
如果我们想将值 92 附加到数组,我们可以使用下面的 MongoDB 命令。
db.student.update( { "sem": 1}, { $addToSet: { "achieve": 92 } } );
前面的代码将 92 附加到数组字段完成。
查看最新更新的文档:
db.student.find().pretty();
命令的输出:
{ "_id" : 1, "achieve" : [ 70, 80, 90, 92 ], "sem" : 1 }
$addToSet 使用 $each 修饰符添加多个值的示例
以下 MongoDB 命令可以将数字 10 和 11 附加到数组字段完成。
db.student.update( { "sem": 1}, { $addToSet: { "achieve":{$each:[10,11]}}});
在上面的示例中,数字 10 和 11 附加到使用 $each 修饰符实现的数组字段。
查看最新更新的文档:
db.student.find().pretty();
上面给出的查询的输出可以在这个截图中看到。
相关文章
在 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 进行开始查询。 它为查询中的模式匹配字符串提供正则表达式功能。