Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 当数字与动态字段名关联时,$inc的Mongo节点语法_Node.js_Mongodb_Time Series - Fatal编程技术网

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});