如何更新文档并在特定规则的子文档中插入键值?
MongoDB版本:3.4
使用此CLI插入模拟数据
db.country.insertMany([{"_id":"us","groups":[{"group":"1"},{"group":"2"} ]},{"_id":"eu","groups":[{"group":"1"},{"group":"2"}]}, {"_id":"jp","groups":[{"group":"2"}]}])
原始数据
db.country.find()
{
"_id": "us", "groups": [ { "group" : "1" }, { "group": "2" } ]
}
{
"_id": "eu", "groups": [ { "group" : "1" }, { "group" : "2" } ]
}
{
"_id": "jp", "groups": [ { "group" : "2" } ]
}
如何获得此结果? (只需添加状态:对组1感到高兴)
{
"_id": "us", "groups": [ { "group" : "1", "status": "happy" }, { "group": "2" } ]
}
{
"_id": "eu", "groups": [ { "group" : "1", "status": "happy" }, { "group" : "2" } ]
}
{
"_id": "jp", "groups": [ { "group" : "2" } ]
}
我知道如何选择匹配group = 1的所有组
db.country.aggregate([
{'$unwind': '$groups'},
{'$match': {'groups.group': '1'}} ,
{'$project': {'group': '$groups.group', _id:0 }}
])
{ "group" : "1" }
{ "group" : "1" }
并且也知道如何使用update + $set
这样的
// { "_id": 1, "people": {"name": "tony" } }
db.test.update({_id: 1}, { $set: {'people.country': 'taiwan'}})
// { "_id": 1, "people": {"name": "tony" , "country": "taiwan" } }
但如何合并update + $set
和aggregate function
?请帮帮我。
pymongo对我来说没问题。
答案 0 :(得分:1)
如何获得此结果? (只需添加状态:对组1感到高兴)
使用$
来引用匹配的子文档在数组中的位置。
db.coll.update_many({'groups.group':'1'}, {'$set': {'groups.$.status': 'happy'}})
查看更多here