Meteor mongodb $ inc更新

时间:2015-11-28 05:39:25

标签: mongodb meteor mongodb-query

我有这个mongo集合和vars:

items:{
 type_one: 0,
 type_two: 0
}

var valueOne = 1;
var nameItem = type_one;

我尝试更新一个值,但不起作用。 我试过这个:

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 );

但没有一个可以工作,我收到了这条消息:

"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"}"

这是一个不兼容的问题吗?

2 个答案:

答案 0 :(得分:1)

您需要使用括号[]运算符动态构建查询。还有" nameItem"必须是一个字符串。

var valueOne = 1;
var nameItem = 'type_one';
var inc = {};
inc[ 'items.' + nameItem ] = valueOne;
Collection.update({ createdBy: user_id }, { '$inc': inc } )

答案 1 :(得分:0)

我可以提出的唯一可能原因是您以String的形式将数字插入集合中,或者您尝试使用String值增加。尝试在代码中使用parseInt(stringValue)