Reputation: 87
I have this mongo collection and vars:
items:{
type_one: 0,
type_two: 0
}
var valueOne = 1;
var nameItem = type_one;
I try to update a value, but not work. I tried this:
Collection.update({createdBy: user_id}, {$inc: { items.$.nameItem: valueOne}} );
Collection.update({createdBy: user_id}, {$inc: { "items.$.nameItem": valueOne}} );
Collection.update({createdBy: user_id}, {$inc: { "items."+nameItem: valueOne}} );
Collection.update({createdBy: user_id}, {$inc: { "items."+nameItem: 1}} );
var object = { $inc: { "items."+nameItem: valueOne} };
Collection.update({createdBy: user_id}, object );
var object = { $inc: { items.$.nameItem: valueOne} };
Collection.update({createdBy: user_id}, object );
But none works and I get this message:
"errorClass {error: 409, reason: "MinimongoError: Cannot apply $inc modifier to non-number", details: undefined, message: "MinimongoError: Cannot apply $inc modifier to non-number [409]", errorType: "Meteor.Error"}"
It's a issue o incompatibility?
Upvotes: 0
Views: 658
Reputation: 61235
You need to build your query dynamically using the bracket []
operator. Also "nameItem" must be a string.
var valueOne = 1;
var nameItem = 'type_one';
var inc = {};
inc[ 'items.' + nameItem ] = valueOne;
Collection.update({ createdBy: user_id }, { '$inc': inc } )
Upvotes: 1
Reputation: 1542
The only possible reasons I can come up with this that either you inserted number into collection in the form of String
or you're trying to increment with String
value. Try using parseInt(stringValue)
in your code.
Upvotes: 0