mongdb / nodejs:在$ inc中使用variables不起作用
我有以下,我进入了蒙戈terminal,它的工作很好
db.cars.update({'_id':'FordXdfg'},{$inc :{'attribs.0.totl':1}})
基本上使用点符号更新数组,0是数组的索引。
这确实有用。 但将其转移到节点我的0来自一个variables。
所以我试了
var carIndex = 3;
cars.update({'_id':'FordXdfg'},{$inc :{'attribs.' + carIndex + '.totl':1}}, function (err, callback) ................)
似乎是无效的JavaScript,如果我更换我的carIndex 3然后它的作品即
cars.update({'_id':'FordXdfg'},{$inc :{'attribs.3.totl':1}}, function (err, callback) ................)
有任何想法吗?
谢谢
在JavaScript中使用这种types的对象初始化时,属性名称必须是string文字。 在使用对象初始化语法时,不能在运行时在代码中构造属性名称。 例如,你只能使用文字如:
{ "name": "Martin" "location": "Earth" "value": 1234 }
你不能这样做:
var propName = "name"; var obj = { propName: "Martin"; };
虽然它在语法上似乎起作用,但最终会看到如下所示的对象:
{ propName: "Martin" }
同样,这是因为在使用缩短的语法构造对象时,只有字面值才被接受。 它不会解释variables值。
还有两个其他选项可以通过简单的点符号来设置JavaScript对象的属性:
obj.name = "Martin";
或者,您可以使用括号表示法:
obj["name"] = "Martin";
由于JavaScript中的对象就像关联数组一样,因此您可以在运行时定义新的属性/键,每个键都有一个值,上面的任何一个语法都可以工作,并且都可以产生相同的底层存储(并且可以互换使用)。
因此,需要使用另一种在JavaScript中设置对象属性值的方法分别构造$inc
语法:
var inc = {}; inc["attribs." + carIndx + ".totl"] = 1;
然后在更新中使用它:
{ $inc: inc }