当更新流星中的嵌套集合时,如何为更新路径传递变量

When update nested collection in meteor, how to pass variable for the update path

本文关键字:更新 路径 变量 流星 嵌套 集合      更新时间:2023-09-26

更新Metroet中的嵌套集合不是问题(此处描述:使用$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});

实际上,它是有效的,但不是我想要的方式。它完全替换了"address"对象,删除了其他属性。

有什么想法吗?

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

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

var city = 'NYC';
var object = {};
object["address." + city] = 'new address';
MyCollectionName.update(idOfObjectToUpdate, {$set: object});

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