2

我有一个看起来像这样的 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}} 
} 

ab = 3 已创建或更改。这并不意味着 a = {b:3} 因此我不想覆盖已经存储在文档中的现有 az = 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}}
   } 
} 
4

2 回答 2

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] } });
  }
}

您还可以查看此 URL:http ://www.mongodb.org/display/DOCS/Updating#Updating-ModifierOperations

于 2012-05-17T13:11:23.720 回答
0

变量,这里 dt 是日期和评论,评级和价格可以是另一个变量 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}})

输出:

2019-04-23_review: 1234
2019-04-23_rating: 2345
2019-04-23_price: 1234
于 2019-04-23T15:09:46.277 回答