我有一个mongo文档,如下所示:
{
"_id" : '4fb2a4809ad7324ccba1f6b8',
"events" : {
"4fb2a4809ad7324ccba1f6b9" : {a:{z:1},b:{z:2},c:{z:3}},
"4fb2a4809ad7324ccba1f610" : {a:{z:1},b:{z:2},c:{z:3}}
}
}
然后我的服务器被发送了一个更新对象。
update = {
_id = '4fb2a4809ad7324ccba1f6b8',
event_id: '4fb2a4809ad7324ccba1f610',
changed_data: {a:{b:3}}
}
a.b = 3已创建或更改。这并不意味着a = {b:3}因此我不想覆盖已存储在文档中的现有a.z = 1。
我如何为这些更改编写原子更新?我无法弄清楚的主要问题是如何将变量传递给命令来定位子对象。 (使用node-mongodb-native)
感谢您的帮助!
更新后的文件如下:
{
"_id" : '4fb2a4809ad7324ccba1f6b8',
"events" : {
"4fb2a4809ad7324ccba1f6b9" : {a:{z:1},b:{z:2},c:{z:3}},
"4fb2a4809ad7324ccba1f610" : {a:{z:1, b:3},b:{z:2},c:{z:3}}
}
}
答案 0 :(得分:1)
for (var id in update.changed_data) {
for (var sub_id in update.changed_data[id]) {
db.collection.update({ "_id" : update._id, "$atomic" : "true" },{ $set: {'events.' + update.event_id + '.'+ id +'.' + sub_id : update.changed_data[id][sub_id] } });
}
}
您还可以查看以下网址:http://www.mongodb.org/display/DOCS/Updating#Updating-ModifierOperations
答案 1 :(得分:0)
variables, here dt is date and review, rating & price can be another variable Python: 3.x
rev = str(dt)+'_review'
rat = str(dt)+'-rating'
pri = str(dt)+'_price'
col.update_one({'brand':brand,'product':product},{'$set': {rev : review, rat : rating, pri : price}})
Output:
2019-04-23_review: 1234
2019-04-23_rating: 2345
2019-04-23_price: 1234