我有这个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"}"
这是一个不兼容的问题吗?
答案 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)
。