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

China☆狼群 提交于 2019-12-18 17:24:09

问题


Update a nested collection in meteor is not a problem (and it is described here : Updating a nested property on a collection object with $set)

Basic way to do it :

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

But what if I want to describe my path with variables ?

This one obviously does not work :

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

Sadly this one does not work either:

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

Neither does that one:

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

Well, actually, it works, but not the way I want it. It replace entirely the "address" object, removing the other properties.

Any ideas ?

Is there a way to select the field I want to update in the query part ?


回答1:


It doesn't work because you can't use dynamic keys for object literals in javascript. You need to use bracket notation and build up the object you want to use in the update. For example:

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

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

Your last example should work, assuming Collection is actually the name of a collection, and {sel} is the correct selector for what you are trying to do.



来源:https://stackoverflow.com/questions/18577825/when-update-nested-collection-in-meteor-how-to-pass-variable-for-the-update-pat

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!