学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第60篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。
使用Mongodb UPDATE数据更新字段,当文档不存在,通过指定{upsert: true},可以向数据库插入这条不存在的数据。插入新的数据时,在某些业务场景中,期望对指定字段插入默认值 。比如小学生入学时,默认插入年级为1年级。而不需要更新已存在的数据值。
Mongodb 提供了$setOnInsert方法,当更新不存在的数据,触发insert操作时,向字段指定值。而当数据存在时,只执行$set方法中的字段更新。
在UPDATE语句中,指定{upsert: true}. 当触发新的文档插入操作时,使用$setOnInsert方法向插入文档的指定字段指定默认值。当没有新的文档插入时,不会执行$setOnInsert方法里的语句。
- db.collection.updateOne(
- <query>,
- { $setOnInsert: { <field1>: <value1>,...}},
- { upsert: true}
- )
指定嵌套文档或数组文档中的字段时,使用点操作符。
创建products集合并向集合中插入数据。
- db.products.insertOne({
- _id: 100,
- quantity: 250,
- instock: true,
- reorder: false,
- details: { model: "14QQ", make: "Clothes Corp" },
- tags: [ "apparel", "clothing" ],
- ratings: [ { by: "Customer007", rating: 4 } ]
- })
编写数据更新语句,更新products集合中不存在的数据,指定{upsert: true}。使用$setOnInsert方法,当更新的数据不存在时,插入默认字段{ defaultQty: 100}.
- db.products.updateOne(
- {_id: 1},
- {
- $set: {item: "apple"},
- $setOnInsert: {defaultQty: 100}
- },
- {
- upsert: true
- }
- )
编写数据更新语句,更新文档{_id:100}。指定{upsert: true},使用$setOnInsert方法,当更新的数据不存在时,插入默认字段{ defaultQty: 100}.
- db.products.updateOne(
- {_id: 100},
- {
- $set: {item: "apple"},
- $setOnInsert: {defaultQty: 100}
- },
- {
- upsert: true
- }
- )
查看数据更新结果,$setOnInsert方法并未执行。