如果 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 以不同的场景进行简要说明。
转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处
本文地址:
相关文章
在 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 进行开始查询。 它为查询中的模式匹配字符串提供正则表达式功能。