Node.js 当数字与动态字段名关联时,$inc的Mongo节点语法
与问题()类似,我希望增加作为另一个属性的子属性的数字的值,但在我的例子中,属性的名称是动态生成的。以下是文档的外观:Node.js 当数字与动态字段名关联时,$inc的Mongo节点语法,node.js,mongodb,time-series,Node.js,Mongodb,Time Series,与问题()类似,我希望增加作为另一个属性的子属性的数字的值,但在我的例子中,属性的名称是动态生成的。以下是文档的外观: mydoc { month: ISODate("2014-01-01T00:00:00.000Z"), data { '1':1 '2':1 '3':5 } } “1”、“2”和“3”字段表示天数,以便文档可以使用数据元素中表示的所有天数对特定月份进行计数 如果我在更新过程中显式命名属性,它会起作用,但当我将属性名称构建为字符
mydoc {
month: ISODate("2014-01-01T00:00:00.000Z"),
data {
'1':1
'2':1
'3':5
}
}
“1”、“2”和“3”字段表示天数,以便文档可以使用数据元素中表示的所有天数对特定月份进行计数
如果我在更新过程中显式命名属性,它会起作用,但当我将属性名称构建为字符串并传入时,字符串变量名称将被视为属性名称:
// Works as expected
col.update({ ts: monthdate }, { $inc: { 'data.4': 1 }, { 'upsert': true }, callback});
mydoc {
month: ISODate("2014-01-01T00:00:00.000Z"),
data {
'4':1
}
}
// Doesn't work as expected (or rather hoped..)
var fieldname = 'data' + 4.toString();
col.update({ ts: monthdate }, { $inc: { fieldname: 1 }, { 'upsert': true }, callback});
mydoc {
month: ISODate("2014-01-01T00:00:00.000Z"),
data {
fieldname:1
}
}
是否有某种方法可以转义属性名,以便MongoDB节点驱动程序知道应该计算其内容,而不是变量名本身
谢谢
詹姆斯试试这个:
var inc = { $inc: {} },
num = 4;
inc.$inc[ 'data.' + num ] = 1; // you don't need toString()
col.update({ ts: monthdate }, inc, { 'upsert': true }, callback});