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 }