【问题标题】:MongoDb $avg from multiple objectMongoDb $avg 来自多个对象
【发布时间】:2019-01-12 11:08:53
【问题描述】:

我从这段代码中得到了数据:

db.getCollection('lampus').aggregate([
  {
      $unwind: '$data'
  },
{
$match: {_id: "sensor-2",
  'data.tanggal': {
    $gt: (new Date(new ISODate()-1*1000*60*60*24))
  }
}
}, 
{
$sort: {
  'data.tanggal': 1
}
},

])

结果是:

[{"_id":"sensor-2","data":{"sensor": 
{"intensitas":3,"arus":0.05},"tanggal":"2018-08-05T14:05:58.757Z"}},
{"_id":"sensor-2","data":{"sensor": 
{"intensitas":11,"arus":0.05},"tanggal":"2018-08-05T14:05:58.756Z"}},
{"_id":"sensor-2","data":{"sensor": 
{"intensitas":8,"arus":0.05},"tanggal":"2018-08-05T14:05:52.654Z"}},
{"_id":"sensor-2","data":{"sensor": 
{"intensitas":13,"arus":0.05},"tanggal":"2018-08-05T14:05:51.152Z"}},
{"_id":"sensor-2","data":{"sensor": 
{"intensitas":15,"arus":0.05},"tanggal":"2018-08-05T14:05:46.651Z"}},
{"_id":"sensor-2","data":{"sensor": 
{"intensitas":13,"arus":0.1},"tanggal":"2018-08-04T14:05:45.150Z"}}]

有很多“_id:sensor-2”,因为上面代码中的 $unwind 操作。 任务是: 1.有一个“intensitas”值,我怎样才能从所有对象中$avg所有“intensitas”? 2.我如何实现对NodeJs的查询,因为这是来自mongodb的“ISODate”格式,因为当我在nodeJs中尝试“ISODate is undefined”时。

【问题讨论】:

  • 在此聚合结束时,在 intensitas 上执行 $group$avg。对于 ISODate - 它来自 mongoDB 客户端。

标签: node.js mongodb


【解决方案1】:

1-您可以使用 $group 中可用的 $avg,而 $group 中的 ID 为空。 ($avg 也可以在 $project 中使用)

【讨论】:

    【解决方案2】:

    我终于可以做我想做的事了,我用这个代码:

    db.getCollection('lampus').aggregate([
    {
      $unwind: '$data'
    },
    {
    $match: {_id: "sensor-2",
      'data.tanggal': {
        $gt: (new Date(new ISODate()-1*1000*60*60*24))
      }
    }
    },
    
    {
    $sort: {
      'data.tanggal': 1
    }
    },
    {
       $group:
         {
           _id: "$_id",
           RataInten: { $avg: { $multiply: [ "$data.sensor.intensitas" ] } },
           RataArus: { $avg: { $multiply: [ "$data.sensor.arus" ] } },
         }
     },
     {$project: {data:[{arus :"$RataArus",intensitas :"$RataInten"}]}},
     { $out : "3hari" }, 
    
     ])
    

    在 { $out : "3hari" } 上,即创建一个名为 "3hari" 的新集合,我明白了:

    {
    "_id" : "sensor-2",
    "data" : [ 
        {
            "arus" : 0.1,
            "intensitas" : 5.0,
            "today" : ISODate("2018-08-05T15:08:17.513+07:00")
        }
    ]
    }
    

    这就是我想要的,但我遇到了问题,我需要更多的“数据”数组,就像我期望的那样:

    {
    "_id" : "sensor-2",
    "data" : [ 
        {
            "arus" : 0.1,
            "intensitas" : 5.0,
            "today" : ISODate("2018-08-05T15:08:17.513+07:00")
        },
        {
            "arus" : 0.1,
            "intensitas" : 8.0,
            "today" : ISODate("2018-08-08T15:08:17.513+07:00")
        },
        {
            "arus" : 0.1,
            "intensitas" : 9.0,
            "today" : ISODate("2018-08-12T15:08:17.513+07:00")
        }
    ]
    }
    

    是的,我需要更新数据数组,并且有更多数组...

    【讨论】:

      猜你喜欢
      • 2017-10-03
      • 1970-01-01
      • 1970-01-01
      • 2013-07-02
      • 1970-01-01
      • 2019-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多