Using Meteor, I'm trying to perform an update like the following:
Items.update(Session.get('selectedItem'), {'$set': {'directions.0.name': area.value}})
But I'm struggling with how to set the array index of directions dynamically, with something like this:
var index = //a value determined dynamically
Items.update(Session.get('selectedItem'), {'$set': {'directions[index]name': area.value}})
This doesn't work because [index] is wrapped in a string. I also tried to form a custom string, like this:
var string = 'directions.'+itemIndex+'.name'
Items.update(Session.get('selectedItem'), {'$set': {string: area.value}})
But that doesn't work. Any idea on how to do this?
To update a single field or specific fields just use the $set operator. This will update a specific field of "citiName" by value "Jakarta Pusat" that defined by $set operator.
The way we do this is by $project ing our documents and using the $concat string aggregation operator to return the concatenated string. You then iterate the cursor and use the $set update operator to add the new field to your documents using bulk operations for maximum efficiency.
Set variable value in MongoDB save() method Use db. yourCollectionName. save(yourVariableName) to set variable value, wherein “yourVariableName” is your variable.
$ is referred to the root document fields where as $$ referred to the variable names. Here '$data' is the document array field and the $$currentData is the variable taken in the as expression of $map aggregation.
You need to build up your $set
object programmatically:
var setModifier = { $set: {} };
setModifier.$set['directions.' + index + '.name'] = area.value;
Items.update(Session.get('selectedItem'), setModifier);
Update
If your JavaScript environment supports computed property names (e.g. node.js 4+), you can do this in one step:
Items.update(Session.get('selectedItem'), { $set: {
['directions.' + index + '.name']: area.value
}});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With