首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自多个对象的MongoDb $avg

来自多个对象的MongoDb $avg
EN

Stack Overflow用户
提问于 2018-08-05 13:08:47
回答 2查看 76关注 0票数 0

我从下面的代码中获得了数据:

代码语言:javascript
复制
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
}
},

])

结果是:

代码语言:javascript
复制
[{"_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"}}]

因为上面代码中的$unwind操作,所以有很多"_id: sensor-2“。Quest的问题是: 1.有一个"intensitas“值,如何从所有对象中定义所有"intensitas”?2.如何实现对nodeJs的查询,因为这是mongodb的"ISODate“格式,因为当我在NodeJs中尝试"ISODate is $avg”时。

EN

回答 2

Stack Overflow用户

发布于 2018-08-05 14:35:25

1-您可以使用$group中提供的$avg,但$group中的id为空。( $project中也提供了$avg)

票数 0
EN

Stack Overflow用户

发布于 2018-08-05 16:20:33

最后,我可以做我想做的事情,我使用以下代码:

代码语言:javascript
复制
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”的集合的新集合,我得到了这个:

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

这就是我想要的,但我遇到了问题,我需要更多的"data“数组,正如我所期望的:

代码语言:javascript
复制
{
"_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")
    }
]
}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51691554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档