如何在Meteor中动态更新/设置Collection的子属性?

时间:2013-01-28 14:28:05

标签: javascript mongodb meteor

我想在我的代码中指定动态更新数据库更新中的哪个属性。像这样:

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

(profile [fieldname]无法正常工作。)

上述结果应与此相同:

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

我怎么能以一种干净的方式实现这个目标呢? (没有让整个对象进行操作并将整个对象发回。)

2 个答案:

答案 0 :(得分:16)

您目前无法在对象文字中定义变量键。你将不得不构建对象,然后传递它:

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

[更新]

ECMAScript 6已在对象文字/初始值设定项中定义了对computed keys的支持。

因此,使用ES6-compatible engine,现在可以将其写为:

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

答案 1 :(得分: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)
    });