4

更新流星中的嵌套集合不是问题(此处描述:使用 $set 更新集合对象上的嵌套属性

基本方法:

Collection.update({sel}, {"$set" : {"address.city": "new address"}});

但是如果我想用变量来描述我的路径呢?

这显然不起作用:

var cityName = "NYC";
Collection.update({sel}, {"$set" : {"address." + cityName: "new address"}});

可悲的是,这个也不起作用:

var path = "address.NYC";
Collection.update({sel}, {"$set" : {path: "new address"}});

那个也没有:

var object = {"address.NYC": "new address"};
Collection.update({sel}, {"$set" : object});

好吧,实际上,它有效,但不是我想要的方式。它完全替换了“地址”对象,删除了其他属性。

有任何想法吗 ?

有没有办法在查询部分选择我要更新的字段?

4

1 回答 1

4

它不起作用,因为您不能在 javascript 中对对象文字使用动态键。您需要使用括号表示法并在update. 例如:

var city = 'NYC';
var object = {};
object["address." + city] = 'new address';

MyCollectionName.update(idOfObjectToUpdate, {$set: object});

您的最后一个示例应该有效,假设Collection实际上是集合的名称,并且{sel}是您尝试执行的正确选择器。

于 2013-09-02T17:15:07.070 回答