我想在我的代码中指定动态更新数据库更新中的哪个属性。像这样:
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"}})
我怎么能以一种干净的方式实现这个目标呢? (没有让整个对象进行操作并将整个对象发回。)
答案 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)
});