我想在DB中的对象中添加一个带有变量名的新字段:这意味着,我不知道该字段的名称,但它保存在变量“newFieldName”中。
所以我想做的基本上是这样的:
var newFieldName = "world";
db.bios.update(
{ _id: 3 },
{ $set: {
"hello."+newFieldName: "Amazing Grace"
}
}
)
更新后,我希望对象“hello”有一个字段“world”,其值为“Amazing Grace”。
但这甚至没有编译,更不用说工作了。我该怎么办?
答案 0 :(得分:11)
您可以使用中间对象:
var update = { $set : {} };
update.$set['hello.' + newFieldName] = 'Amazing Grace';
db.bios.update({ _id : 3 }, update, ...)
答案 1 :(得分:3)
回答@yossale& @robertklep,内联版本实际上可以使用表达式和逗号运算符:
var newFieldName = "world", o;
db.bios.update(
{ _id: 3 },
{$set:(o = {}, o["hello."+newFieldName] = "Amazing Grace", o)}
)
答案 2 :(得分:1)
简单的是:
useEffect(() => {
getTweets();
}, [tweets]); // [tweets means that hook works every time 'tweets' state changes]
@Andy的回答解决了我的问题。
答案 3 :(得分:0)
var some_object = Posts.findOne({...});
var new_value = 1337;
Posts.update(another_object._id,
{$set: {
[some_object.some_field]:new_value,
}
}
);