如果我想从集合的所有记录中搜索最高温度,那么下面的查询是完美的
db.posts3.aggregate([{$group:{ _id: "maximum",Temperature:{$max:"$Temperature"}}}]);
如果我想搜索最近两天的最高温度,mongo查询将无法正常工作。
db.posts3.aggregate([{$group:
{ _id: "maximum",
{"time":{"$gt": ISODate("2019-10-12T11:25:06.156Z"),
"$lt":ISODate("2019-12-12T11:25:07.156Z")}
},
Temperature:{$max:"$Temperature"}
}
}
]);
答案 0 :(得分:3)
将时间搜索移至$match
管道可能会解决您的问题:
db.posts3.aggregate([
{$match:
{"time": {
"$gt": ISODate("2019-10-12T11:25:06.156Z"),
"$lt":ISODate("2019-12-12T11:25:07.156Z")}
}
},
{$group:
{
_id: "maximum",
Temperature:{$max:"$Temperature"}
}
}
]);
答案 1 :(得分:1)
以下汇总将在最近两天内获得temp
的{{1}}字段的最大值。
dt
结果为db.test.aggregate( [
{
$match: {
$expr: {
$gte: [ "$dt", { $subtract: [ ISODate(), 2*24*60*60*1000 ] } ]
}
}
},
{
$group: {
_id: null,
maxTemp: { $max: "$temp" }
}
},
] )
,其中包含以下输入文档:
"maxTemp" : 14