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

loo*_*omi 4 javascript mongodb meteor

我想在我的代码中指定在DB更新中动态设置/更新哪个属性.像这样的东西:

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

(个人资料[fieldname]无法正常工作.)

上述结果应该与此相同:

Meteor.users.update({_id:Meteor.user()._id},
                       {$set:{"profile.firstname": "loomi"}})
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*ski 16

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

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

[更新]

ECMAScript 6定义了对对象文字/初始值设定中的计算键的支持.

因此,使用与ES6兼容的引擎,现在可以将其写为:

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