Mongodb脚本定位运算符

时间:2017-02-07 16:25:21

标签: mongodb mongodb-query

我正在考虑更新mongodb文档中的数组对象,如下所示

var cursor = db.coll.find();
cursor.forEach(function(x){
  if(x.arr) {
    x.arr.forEach(function(y,i){
      if(y.field1) {
        db.coll.update({_id: x._id}, {$set:{'arr.'+i+'.field1': 'x' + y.field1}})
      }
    })
  }
})

我在{$set:{'arr.'+i+'.field1': 'x' + y.field1}}收到语法错误 有解决方法吗?

1 个答案:

答案 0 :(得分:1)

您正尝试在初始化时动态地将值分配给JavaScript对象的键。只需单独创建它,然后在以后的步骤中分配密钥。

var cursor = db.coll.find();
cursor.forEach(function(x){
  if(x.arr) {
    x.arr.forEach(function(y,i){
      if(y.field1) {
        var setStmt = {};
        setStmt['arr.'+i+'.field1'] = 'x' + y.field1;
        db.coll.update({_id: x._id}, {$set: setStmt});
      }
    })
  }
})