《MongoDB入门教程》第20篇 文档更新:UPSERT
第 14 篇中介绍了更新文档的 updateOne() 和 updateMany() 方法,它们还支持一种特殊的操作:更新插入(UPSERT)。
更新插入
更新插入包含了两个操作,更新文档和插入文档:
- 如果存在匹配的文档,更新该文档;
- 否则,插入一个新文档。
如果想要实现更新插入,可以将 updateOne() 或者 updateMany() 方法中的 upsert 选项设置为 true:
db.collection.updateOne(filter, update, { upsert: true} )
document.collection.updateMany(filter, update, { upsert: true} )
默认情况下,第三个参数中的 upsert 字段为 false。意味着只有匹配查询条件的文档会被更新。
示例
创建以下文档集合:
db.products.insertMany([
{ "_id" : 1, "nmea" : "xPhone", "price" : 799, "releaseDate": ISODate("2011-05-14"), "spec" : { "ram" : 4, "screen" : 6.5, "cpu" : 2.66 },"color":["white","black"],"storage":[64,128,256]},
{ "_id" : 2, "nmea" : "xTablet", "price" : 899, "releaseDate": ISODate("2011-09-01") , "spec" : { "ram" : 16, "screen" : 9.5, "cpu" : 3.66 },"color":["white","black","purple"],"storage":[128,256,512]},
{ "_id" : 3, "nmea" : "SmartTablet", "price" : 899, "releaseDate": ISODate("2015-01-14"), "spec" : { "ram" : 12, "screen" : 9.7, "cpu" : 3.66 },"color":["blue"],"storage":[16,64,128]},
{ "_id" : 4, "nmea" : "SmartPad", "price" : 699, "releaseDate": ISODate("2020-05-14"),"spec" : { "ram" : 8, "screen" : 9.7, "cpu" : 1.66 },"color":["white","orange","gold","gray"],"storage":[128,256,1024]},
{ "_id" : 5, "nmea" : "SmartPhone", "price" : 599,"releaseDate": ISODate("2022-09-14"), "spec" : { "ram" : 4, "screen" : 5.7, "cpu" : 1.66 },"color":["white","orange","gold","gray"],"storage":[128,256]}
])
下面的查询使用 updateMany() 方法更新文档(_id: 6)的 price 字段:
db.products.updateMany(
{_id: 6 },
{ $set: {price: 999} }
)
查询没有匹配任何文档,因此不会更新任何文档:
{
acknowledged: true,
insertedId: null,
matchedCount: 0,
modifiedCount: 0,
upsertedCount: 0
}
如果将以上示例中 updateMany() 方法的 upsert 选项设置为 true,将会插入一个新文档。例如:
db.products.updateMany(
{ _id: 6 },
{ $set: {price: 999} },
{ upsert: true}
)
查询返回的结果如下:
{
acknowledged: true,
insertedId: 6,
matchedCount: 0,
modifiedCount: 0,
upsertedCount: 1
}
结果显示没有匹配任何文档(matchedCount: 0),updateMany() 方法没有更新任何文档。但是该方法插入了一个文档并返回了新文档的 id(upsertedId: 6)。
查询集合 products 中的文档,可以返回新的文档:
db.products.find({_id:6})
[ { _id: 6, price: 999 } ]
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgacagb
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13