gpt4 book ai didi

javascript - mongodb/nodejs : using variables in $inc doesn't work

转载 作者:可可西里 更新时间:2023-11-01 10:32:22 24 4
gpt4 key购买 nike

我有以下输入到 mongo 终端的信息,它运行良好

db.cars.update({'_id':'FordXdfg'},{$inc :{'attribs.0.totl':1}})

基本上使用点符号更新数组,0 是数组的索引。

这确实有效。但是将它传输到 Node my 0 来自一个变量。

所以我试过了

变种汽车索引= 3;

 cars.update({'_id':'FordXdfg'},{$inc :{'attribs.' + carIndex + '.totl':1}}, function (err, callback) ................)

似乎是无效的 javascript,如果我用 3 替换我的 carIndex 那么它就可以工作,即

 cars.update({'_id':'FordXdfg'},{$inc :{'attribs.3.totl':1}}, function (err, callback) ................)

有什么想法吗?

谢谢

最佳答案

在 JavaScript 中使用这种对象初始化样式时,属性名称必须是字符串文字。使用对象初始化语法时,无法在运行时在代码中构造属性名称。例如,您只能使用如下文字:

{
"name": "Martin"
"location": "Earth"
"value": 1234
}

不能这样做:

var propName = "name";
var obj = {
propName: "Martin";
};

虽然它在语法上似乎有效,但您最终会得到一个如下所示的对象:

{ 
propName: "Martin"
}

同样,这是因为在使用缩短的语法构造对象时只接受文字值。它不会解释变量值。

还有两个其他选项可以通过简单的点符号来设置 JavaScript 对象的属性:

obj.name = "Martin";

或者,您可以使用括号表示法:

obj["name"] = "Martin";

由于 JavaScript 中的对象就像关联数组一样,您可以在运行时定义新的属性/键,每个属性/键都有一个值,上述任一语法都有效,并且两者都产生相同的底层存储(并且可以互换使用)。

因此,您需要使用另一种在 JavaScript 中设置对象属性值的技术来单独构造 $inc 语法:

var inc = {};
inc["attribs." + carIndx + ".totl"] = 1;

然后在你的更新中使用它:

{ $inc: inc }

关于javascript - mongodb/nodejs : using variables in $inc doesn't work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20441673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com