pokaxperia
pokaxperia

Reputation: 87

Meteor mongodb $inc with update

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

Answers (2)

Sede
Sede

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

Faysal Ahmed
Faysal Ahmed

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

Related Questions