mongodb更新指定条件的子文档
2016年1月4日 · 76 字 · 1 分钟
文档内容
{
"_id": ObjectId("5689db252d162c9881532986"),
"openid": "xialei",
"channels": [
{
"channel_id": "c1"
},
{
"channel_id": "c2"
},
{
"channel_id": "c2"
},
{
"channel_id": "c2"
}
]
}
需求
把该文档的channels中channel_id为c2的删除,但是主记录要保留。 这时候就不能用remove方法了,该方法会删除整条文档,查询官方文档发现有个findAndModify方法。
函数原型
db.collection.findAndModify({
query: <document>,
sort: <document>,
remove: <boolean>,
update: <document>,
new: <boolean>,
fields: <document>,
upsert: <boolean>
bypassDocumentValidation: <boolean>
});
调用代码
db.collection.findAndModify({
query: {"openid":"xialei"},
update: {"$pull":{"channels":{"channel_id":"c2"}}},
new: true
});
执行结果
{
"_id" : ObjectId("5689db252d162c9881532986"),
"openid" : "xialei",
"channels" : [
{
"channel_id" : "c1"
}
]
}
$pull是数组操作符,明白update中的操作之后,相信大家可以举一反三,比如要插入一个文档就肯定会想到用**$push**了。