问题
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