我从下面的代码中获得了数据:
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"}}]因为上面代码中的$unwind操作,所以有很多"_id: sensor-2“。Quest的问题是: 1.有一个"intensitas“值,如何从所有对象中定义所有"intensitas”?2.如何实现对nodeJs的查询,因为这是mongodb的"ISODate“格式,因为当我在NodeJs中尝试"ISODate is $avg”时。
发布于 2018-08-05 14:35:25
1-您可以使用$group中提供的$avg,但$group中的id为空。( $project中也提供了$avg)
发布于 2018-08-05 16:20:33
最后,我可以做我想做的事情,我使用以下代码:
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")
}
]
}这就是我想要的,但我遇到了问题,我需要更多的"data“数组,正如我所期望的:
{
"_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")
}
]
}是的,我需要更新数据数组,并且有更多的数组...
https://stackoverflow.com/questions/51691554
复制相似问题