如何从数组元素创建对象以传递到mongoose和node.js中的mongodb聚合中?

阿拉文

我有一个用例,其中将在数组中获取动态字段名称。我需要将这些字段传递给mongo db聚合查询,以获取给定月份中该字段值的总和。我需要删除timeStamp & deviceId数组中的字段。

let jsonObj = [
  { name: "heat", value: "HEAT" },
  { name: "humidity", value: "HUMIDITY" },
  { name: "deviceId", value: "DEVICEID" },
  { name: "timeStamp", value: "TIMESTAMP" }
];

let vList = [];
jsonObj.forEach(async data => {
  if (!data.name.match(/time/g) || !data.name.match(/deviceId/g)) {
    vList.push(data.name); //Should exclude timestamp & deviceId (case-insensitive)
  }
});

let variableObj = [];
vList.forEach(async data => {
  let k = "{" + '"$sum":"$' + data + '"}';
  // console.log(k)
  k = JSON.parse(k);
  variableObj.push(data + ":" + k);
});

然后,结果数组如下所示。

[ 'heat:{"$sum":"$heat"}',
  'humidity:{"$sum":"$humidity"}',
  'timeStamp:{"$sum":"$timeStamp"}',
  'deviceId:{"$sum":"$deviceId"}' ]

我没有得到如何删除每个项目周围的单引号以及如何将它们传递给查询。

我的查询是:

db.collection(templateId).aggregate([
  {
    $match: {
      entryDayTime: {
        $lt: new Date(lastDay),
        $gte: new Date(firstDay)
      }
    }
  },
  {
    $group: {
      _id: "$deviceId",
      Count: { $sum: 1 }
      // Should pass those array elements here like,
      //heat:{"$sum":"$heat"},
      //humidity:{"$sum":"$humidity"}
    }
  },
  { $sort: { entryDayTime: -1 } }
]);
安比安

您可以一起创建整个组对象,然后将其传递到$group舞台上。同时删除那些async关键字,迭代不是异步的。

注意: if子句必须&&同时排除两个关键字,并且iflag是为了使正则表达式不区分大小写。目标对象的创建可以在第一次迭代中完成。

let jsonObj = [
  { name: "heat", value: "HEAT" },
  { name: "humidity", value: "HUMIDITY" },
  { name: "deviceId", value: "DEVICEID" },
  { name: "timeStamp", value: "TIMESTAMP" }
];

let groupObject = {
  _id: "$deviceId",
  Count: { $sum: 1 }
};

jsonObj.forEach(data => {
  if (!data.name.match(/timestamp/gi) && !data.name.match(/deviceid/gi)) {
    groupObject[data.name] = { $sum: "$" + data.name };
  }
});

console.log(groupObject);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Node JS在MongoDb中聚合查询

来自分类Dev

MongoDB聚合查询,其中node.js中的位置

来自分类Dev

MongoDB聚合查询,其中node.js中的位置

来自分类Dev

MongoDB聚合中的Mongoose虚拟

来自分类Dev

mongodb中的倍数组聚合

来自分类Dev

Mongodb聚合中的数组元素总和

来自分类Dev

MongoDB:在聚合结果中创建对象

来自分类Dev

MongoDB聚合:如何在MongoDB聚合中应用分页

来自分类Dev

使用Mongoose的Node.js中的MongoDB聚合未获得正确的结果

来自分类Dev

在MongoDB聚合中合并数组字段

来自分类Dev

在MongoDB中聚合(不包括数组项)

来自分类Dev

聚合查询中的MongoDB限制数组

来自分类Dev

MongoDB聚合-如果数组中的值匹配

来自分类Dev

MongoDB聚合-子数组中的计数不同

来自分类Dev

在MongoDB中聚合形成数组

来自分类Dev

在mongodb中按顺序聚合数组

来自分类Dev

MongoDB在嵌套数组聚合中查找

来自分类Dev

在聚合mongodb中按文档数组排序

来自分类Dev

在mongodb中聚合数据数组

来自分类Dev

如何使用node.js在mongodb中获取按组名分组的聚合值?

来自分类Dev

如何在Node.js和Mongoose中的对象数组中更新特定对象

来自分类Dev

MeteorJS中的MongoDB聚合和分组问题

来自分类Dev

如何计算Mongodb聚合中的字段

来自分类Dev

如何计算MongoDB聚合中的字段?

来自分类Dev

如何在MongoDB聚合中包括属性

来自分类Dev

如何更改代码以完成mongodb中的聚合?

来自分类Dev

如何计算Mongodb聚合中的字段

来自分类Dev

我如何在 mongodb 中聚合?

来自分类Dev

如何使用 mongodb 和 node 中的聚合更新值