10

我试图在更新语句中使用变量作为字段名称,但它根本不起作用,有什么建议吗?

例如:

COLLECTIONNAME.update(
    { _id: this._id },
    { $set: { VARIABLE1 : VARIABLE2 } }
);

实际代码:

 'blur .editable' : function () {
      var target = event.currentTarget.value;
      var field = event.currentTarget.name;
      field = ' " ' + field + ' " ';
      Hostings.update( { _id: this._id },{ $set: { field : target } } );
    }
4

3 回答 3

14

你可以这样做:

'blur .editable' : function () {
  var target = event.currentTarget.value;
  var field = event.currentTarget.name;

  var obj = {};
      obj[field] = target;
  Hostings.update( { _id: this._id },{ $set: obj } );
}

可以通过两种方式访问​​ Javascrip 对象:

object.attribute

或者

object["attribute"]

如果您使用第二种方法,您可以使用变量访问它

于 2013-08-29T06:29:22.163 回答
3

根据L. Norman的评论,我发现使用[]for 字段值可以代替

collection = "my_collection"
db.getCollection(collection).find({}).forEach(function(doc) {
    var new_field = "new_field";
    var new_value = "new_value";

    db.getCollection(collection).update({_id: doc._id}, 
        {$set: {[new_field] : new_value}}) 
})
于 2020-04-06T02:41:41.560 回答
1

对于您的查询,
COLLECTIONNAME.update( { _id: this._id },{ $set: { VARIABLE1 : VARIABLE2 } } ); mongodb 将采用 VARIABLE2 的值,但它会将“VARIABLE1”视为文档中的一个字段。

对于传递其值为字段名称的变量:

您必须创建一个 javascript 对象并按如下方式使用它:

var obj={};
obj[VARIABLE1] = VARIABLE2; //where VARIABLE1 and VARIABLE2 are getting values from elsewhere earlier

如果您想以这种方式拥有多个字段,只需将其添加到同一个对象:

obj[VARIABLE3]= VARIABLE4;

然后进行更新操作:

db.collectionname.update( { _id: this._id },{ $set: obj } );
于 2014-03-04T23:12:25.333 回答