如果 MongoDB 中不存在则插入记录
在本文中,简要讨论了在 MongoDB 集合中插入记录。 还解释了插入这些记录的不同方法。
此外,还简要介绍了 Upsert 和 $setOninsert。
在 MongoDB 中更新插入
Upsert 是一个 MongoDB 选项,用于更新操作,如 update()、findAndModify() 等。 或者,换句话说,upsert是update和insert结合的结果(update + insert = upsert)。
如果该选项的值为 true 并且识别出与指定查询匹配的一个或多个文档,则更新操作将更新匹配的一个或多个文档。 或者,假设此选项的值为真,并且没有文档或文档与提供的文档匹配。
在这种情况下,此选项会使用操作中指定的字段在集合中创建一个新文档。 upsert 操作选项值默认为 false。
如果共享集合中的更新插入值为真,则必须在筛选器中包含完整的共享密钥。
语法:
upsert: <boolean>
upsert 选项值为 true 或 false。
现在您将了解 upsert 选项的用法。
使用 MongoDB 中的 findAndModify() 方法更新插入
使用 findAndModify()
函数,您可以使用 upsert 选项。 此方法中此选项的默认值为 false。
如果将此选项的值设置为 true,该过程将执行以下操作之一。
- 如果发现一个或多个文档与给定的查询条件匹配,则 findAndModify() 方法会更新文档。
- 如果没有文档匹配给定的查询条件,则 findAndModify() 方法会在集合中插入一个新文档。
语法:
db.Collection_name.findAndModify(
{
selection_criteria:<document>,
sort: <document>,
remove: <boolean>,
update: <document>,
new: <boolean>,
fields: <document>,
upsert: <boolean>,
bypassDocumentValidation: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, … ]
})
通过将 upsert 选项的值调整为 true,您现在将向员工集合中插入一个新文档。
db.employee.findAndModify({query:{name:"Ram"},
update:{$set:{department:"Development"}},
upsert:true})
这里upsert选项的值设置为 true; findAndModify()
方法插入一个包含两个字段(名称:“Ram”和部门:“Development”)的新文档,因为没有文档与名称 Ram 匹配。
Upsert 使用 MongoDB 中的 update() 方法
使用 update()
函数,您可以使用 upsert 选项。 此函数中此参数的默认值为 false。
如果将此选项的值设置为 true,该过程将执行以下操作之一。
- 如果找到符合给定查询条件的文档,则 update() 方法会更新文档。
- 如果没有文档满足指定的查询条件,则 update() 函数会向集合中添加一个新文档。
在 name 字段上做一个唯一索引,以防止 MongoDB 多次添加同一个文档。 例如,如果许多文档要求使用 upsert: true 进行相同的更新,则只有一个更新操作成功插入具有唯一索引的新文档。
语法:
db.Collection_name.update({Sele ction_ criteria}, {$set:{Update_data}}, {
upsert: <boo. lean >,
multi: <boo. lean>,
writeConcern: < document>,
collation: < document>,
arrayFilters: [ <filter document1>, … ],
hint: <document|string>
})
通过将 upsert 选项的值更改为 true,您将向员工集合中插入一个新文档。
db.employee.update({name:"Priya"}, {$set: {department: "HR"}},{upsert:true})
因为 upsert 选项的值设置为 true,update() 函数插入一个包含两个字段(name: "Priya" 和 department: "HR")的新文档,因为没有文档与名称 Priya 匹配。
在 MongoDB 中使用运算符表达式更新插入
假设给定集合中没有文档与过滤器匹配。 在这种情况下,更新参数是一个带有更新操作符的文档。
upsert 选项的值为真; update 操作根据给定查询参数中的相等子句创建新文档,并应用 update 参数中的表达式。
或者,换句话说,当 upsert 选项为真且没有文档符合提供的过滤器时,更新操作会在给定集合中创建一个新文档,其字段在查询和更新文档中指定。
例子:
通过将 upsert 选项的值更改为 true,您将把一个新文档放入示例集合中。
db.example.update({Name: "Rekha"}, // Query parameter
{$set: {Phone: '7842235468 '}, // Update document
$setOnInsert: {Gender: 'Female'}},
{upsert: true})
update()
函数生成一个包含查询条件字段“Name: Rekha”的新文档,并应用 $set 和 $setOnInsert 操作。
在 MongoDB 中使用替换文档更新插入
假设提供的集合中没有文档满足过滤器并且更新参数包含替换文档,并且 upsert 文档的值设置为 true。 更新操作在集合中插入一个新文档,其字段在替换文档中指定。
如果替换文档包含 _id
字段,MongoDB 不会为新文档生成唯一的 _id
字段。 或者,如果替换文档缺少 _id
字段,MongoDB 会为新文档创建一个新的 _id
字段。
请注意,不允许在查询参数和替换文档中使用不同的 _id
字段值。 如果这样做,就会遇到问题。
例子:
通过将 upsert 选项的值调整为 true,您现在将向示例集合中插入一个新文档。
db.example.update({Name:"Hema"}, // Query parameter
{Name:"Hema", Phone:8332564578}, // Replacement document
{upsert:true})
在 MongoDB 中使用聚合管道更新插入
聚合管道是一个多阶段管道,其中接受文档作为输入并生成文档的结果集合。
然后将生成的文档作为输入并在下一步骤(如果可用)中创建,直到最后阶段。 管道中的阶段数可能在 1 到 n 之间。
假设没有文档符合指定的过滤器并且更新参数包含聚合管道,并且 upsert 选项的值设置为 true。 在这种情况下,更新操作将向集合中插入一个新文档。
这个新文档是使用查询参数中的相等子句形成的,然后将管道应用于它以创建要插入的文档。
例子:
通过将 upsert 选项的值调整为 true,您现在将向员工集合中插入一个新文档。
db.employee.update({name:"Ram"}, [{$set: {department: "HR", age:31}}],{upsert:true})
在 MongoDB 中使用带点的 _id 查询更新插入
您已经了解了 update()
函数如何根据查询更改集合中的数据,以及如果找不到匹配的文档,upsert 选项如何添加新字段。
但是,带有点分 _id
查询的更新插入是一个例外,尝试以这种方式插入文档会导致 MongoDB 出错。
解释:
看看下面的更新操作。 创建要插入的文档时更新将失败,因为更新操作指定 upsert: true,并且查询使用点表示法在 _id 字段上提供条件。
db.employee.update({"_id.name":"Roma", "_id.uid":0},{age:21}, {upsert:true})
所以,本文讨论了MongoDB中空字段插入记录的问题。 Upsert 以不同的场景进行简要说明。
相关文章
在 MongoDB Shell 中列出所有数据库
发布时间:2023/05/11 浏览次数:75 分类:MongoDB
-
交互式 Mongo Shell 提供了多个用于获取数据的选项。 本文介绍了在 Mongo Shell 中列出数据库的几种不同方法。
MongoDB 中检查字段包含的字符串
发布时间:2023/05/11 浏览次数:137 分类:MongoDB
-
这篇文章解决了如何在 MongoDB 中使用正则表达式来确定字段是否包含字符串。在 MongoDB 中使用正则表达式 正则表达式 (regex) 是定义搜索模式的文本字符串。
在 MongoDB 中 upsert 更新插入
发布时间:2023/05/11 浏览次数:162 分类:MongoDB
-
在 MongoDB 中,upsert 结合了更新和插入命令。 它可以在 update() 和 findAndModify() 操作中使用。MongoDB 中的 upsert 查询 upsert 采用单个布尔参数。
如何卸载 MongoDB
发布时间:2023/05/11 浏览次数:180 分类:MongoDB
-
要从您的计算机中卸载 MongoDB,您必须先删除 MongoDB 服务、数据库和日志文件。使用这篇 MongoDB 文章,您将能够从 Ubuntu Linux、Mac 和 Windows 卸载 MongoDB。 请务必保留数据备份,因为一旦卸载,便
在 MongoDB 中存储日期和时间
发布时间:2023/05/11 浏览次数:199 分类:MongoDB
-
本 MongoDB 教程解释了 Date() 对象是什么以及如何使用 Date() 方法对集合进行排序。 这也将帮助您找到在 MongoDB 中显示和存储日期/时间的最佳方法。
MongoDB 按 ID 查找
发布时间:2023/05/11 浏览次数:139 分类:MongoDB
-
MongoDB 中的 find by Id() 函数用于获取与用户提供的 id 相匹配的文档。 如果找不到与指定 ID 匹配的文档,则返回空值。
检查 MongoDB 服务器是否正在运行
发布时间:2023/05/11 浏览次数:127 分类:MongoDB
-
这篇 MongoDB 教程将告诉您如何检查是否安装了 MongoDB 以及安装的 MongoDB 服务器的版本。 它在 Windows、UBUNTU 和 MAC 等不同的操作系统中实现。
MongoDB 中的分页
发布时间:2023/05/11 浏览次数:140 分类:MongoDB
-
这篇文章将介绍什么是 MongoDB 中的分页。 为什么在 MongoDB 中需要分页以及在 MongoDB 中完成分页的不同方法或方式是什么。
MongoDB 从查询开始
发布时间:2023/05/11 浏览次数:135 分类:MongoDB
-
在这篇 MongoDB 文章中,用户将学习如何使用 $regex 进行开始查询。 它为查询中的模式匹配字符串提供正则表达式功能。