4

我想在我的代码中指定要在数据库更新中动态设置/更新的属性。像这样的东西:

var fieldname = "firstname"
var name = "loomi"
Meteor.users.update({_id:Meteor.user()._id},
                    {$set:{"profile."+fieldname: name}})

(个人资料 [字段名] 顺便说一句不起作用。)

上面的结果应该和这个一样:

Meteor.users.update({_id:Meteor.user()._id},
                       {$set:{"profile.firstname": "loomi"}})

请问我怎样才能以一种简洁的方式实现这一点?(没有让整个对象进行操作并将整个对象送回。)

4

2 回答 2

16

您目前无法在对象文字中定义变量键。相反,您必须构建对象,然后传递它:

var $set = {};
$set['profile.' + fieldname] = name;
Meteor.users.update({_id:Meteor.user()._id}, { $set: $set });

[更新]

ECMAScript 6 已经定义了对对象字面量/初始化器中计算键的支持。

因此,使用ES6 兼容引擎,现在可以写成:

Meteor.users.update(
    { _id: Meteor.user()._id },
    { $set: { ['profile.' + fieldname]: name } }
);
于 2013-01-28T14:58:44.593 回答
0

这对我有用:

    var $set = {};
    $set['profile.fieldname'] = 'the name';
    Meteor.users.update({_id:Meteor.user()._id}, { $set: $set }, function(error){
        if(error)
            console.log(error.reason)
    });
于 2015-05-29T22:33:11.670 回答