迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > MongoDB >

如果 MongoDB 中不存在则插入记录

作者:迹忆客 最近更新:2023/05/10 浏览次数:

在本文中,简要讨论了在 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,该过程将执行以下操作之一。

  1. 如果发现一个或多个文档与给定的查询条件匹配,则 findAndModify() 方法会更新文档。
  2. 如果没有文档匹配给定的查询条件,则 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选项的值设置为 truefindAndModify() 方法插入一个包含两个字段(名称:“Ram”和部门:“Development”)的新文档,因为没有文档与名称 Ram 匹配。

findandmodify method


Upsert 使用 MongoDB 中的 update() 方法

使用 update() 函数,您可以使用 upsert 选项。 此函数中此参数的默认值为 false。

如果将此选项的值设置为 true,该过程将执行以下操作之一。

  1. 如果找到符合给定查询条件的文档,则 update() 方法会更新文档。
  2. 如果没有文档满足指定的查询条件,则 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 匹配。

update method


在 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 操作。

operator expression


在 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})

replacement document


在 MongoDB 中使用聚合管道更新插入

聚合管道是一个多阶段管道,其中接受文档作为输入并生成文档的结果集合。

然后将生成的文档作为输入并在下一步骤(如果可用)中创建,直到最后阶段。 管道中的阶段数可能在 1 到 n 之间。

假设没有文档符合指定的过滤器并且更新参数包含聚合管道,并且 upsert 选项的值设置为 true。 在这种情况下,更新操作将向集合中插入一个新文档。

这个新文档是使用查询参数中的相等子句形成的,然后将管道应用于它以创建要插入的文档。

例子:

通过将 upsert 选项的值调整为 true,您现在将向员工集合中插入一个新文档。

db.employee.update({name:"Ram"}, [{$set: {department: "HR", age:31}}],{upsert:true})

aggregation pipeline


在 MongoDB 中使用带点的 _id 查询更新插入

您已经了解了 update() 函数如何根据查询更改集合中的数据,以及如果找不到匹配的文档,upsert 选项如何添加新字段。

但是,带有点分 _id 查询的更新插入是一个例外,尝试以这种方式插入文档会导致 MongoDB 出错。

解释:

看看下面的更新操作。 创建要插入的文档时更新将失败,因为更新操作指定 upsert: true,并且查询使用点表示法在 _id 字段上提供条件。

db.employee.update({"_id.name":"Roma", "_id.uid":0},{age:21}, {upsert:true})

dotted query

所以,本文讨论了MongoDB中空字段插入记录的问题。 Upsert 以不同的场景进行简要说明。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 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 进行开始查询。 它为查询中的模式匹配字符串提供正则表达式功能。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便