【发布时间】:2018-08-29 05:22:36
【问题描述】:
我正在编写大于等于 CREATE_DATE 并且小于 CREATE_DATE 的第一个查询我得到的答案是计算持续时间编写另一个查询但是如何在聚合中编写单个查询。
查询 1
db.lights.aggregate({
$match: {
CREATE_DATE: {
$gte: ISODate("2018-01-24T20:05:30.000Z"),
$lt: ISODate("2018-02-24T20:05:30.000Z")
}
}
});
结果
{
"_id": ObjectId("5a9a74843711955836a8b4b5"),
"SWITCHID": "Z4-W40-SS451A/4",
"CREATE_DATE": ISODate("2018-01-24T20:05:30Z"),
"RECEIVEDDATE": ISODate("2018-02-24T20:05:45Z"),
"STATUS": "LIGHTS ON"
}
查询 2
db.lights.aggregate([
{
$addFields: {
offduration: {
$divide: [
{
$subtract: [
"$RECEIVEDDATE",
"$CREATE_DATE"
]
},
3600000
]
}
}
}
]);
结果
{
"_id": ObjectId("5a9a75af3711955836a8b4c8"),
"SWITCHID": "Z4-W40-SS451A/5",
"CREATE_DATE": ISODate("2018-02-24T20:05:30Z"),
"RECEIVEDDATE": ISODate("2018-02-24T20:05:45Z"),
"STATUS": "LIGHTS ON",
"offduration": 0.004166666666666667
}
【问题讨论】:
-
您不能组合这两个查询,因为它们会产生不同的数据。如果将它们结合起来,您将不会得到任何结果。请调整您的数据范围并使用
db.lights.aggregate([{ $match: { CREATE_DATE : {$gte: ISODate("2018-01-24T20:05:30.000Z"), $lte: ISODate("2018-02-24T20:05:30.000Z")} }},{$addFields: { duration: {$divide: [{$subtract: ["$RECEIVEDDATE", "$CREATE_DATE"]}, 3600000]} }}])
标签: javascript mongodb mongoose mongodb-query aggregate-functions