1.$setOnInsert 不存在则插入。
文档地址:
https://docs.mongodb.com/manual/reference/operator/update/setOnInsert/#up._S_setOnInsert
示例:
demo collection 中数据如下:
{ "_id" : ObjectId("5aec13d4856ca01363c3615f"), "class" : "a", "v" : 4 }
{ "_id" : ObjectId("5aec13d9856ca01363c36160"), "class" : "b", "v" : 3 }
db.demo.update(
{class:"d"},
{
$set:{"level":66},
$setOnInsert:{class:"e", v:"6"}
},
{upsert:true}
)
操作后由于不存在class为d的数据所以会插入一条{class:”e”, v:”6”} 的数据并且设置level字段为66.
所以demo collection 中数据如下:
{ "_id" : ObjectId("5aec13d4856ca01363c3615f"), "class" : "a", "v" : 4 }
{ "_id" : ObjectId("5aec13d9856ca01363c36160"), "class" : "b", "v" : 3 }
{ "_id" : ObjectId("5b038258bb726243c39a4010"), "class" : "e", "v" : "6", "level" : 66 }
再看:
db.demo.update(
{class:"e"},
{
$set:{"level":55},
$setOnInsert:{class:"f", v:"6"}
},
{upsert:true}
)
由于已经存在class为e的数据,所以不会插入{class:”f”, v:”6”},而是将class为e的一条数据的level设置为55
2. findAndModify 实现字段自增
> db.b.find()
{ "_id" : "5b038719fb5615acc831d902", "number" : 1 }
db.b.findAndModify(
{
query:{_id:"5b038719fb5615acc831d902"},
update:{$inc:{number:1}},
upsert: true
}
)
> db.b.find()
{ "_id" : "5b038719fb5615acc831d902", "number" : 1 }