给出示例集合:
{ "_id" : ObjectId("59db7bd22f02828b587ca88a"), "date" : ISODate("2014-01-01T07:00:00Z"), "sensor" : "sensor1", "metric" : 10 }
{ "_id" : ObjectId("59db7bd22f02828b587ca88b"), "date" : ISODate("2014-01-01T07:01:00Z"), "sensor" : "sensor1", "metric" : 11 }
{ "_id" : ObjectId("59db7bd22f02828b587ca88c"), "date" : ISODate("2014-01-01T07:02:00Z"), "sensor" : "sensor1", "metric" : 12 }
{ "_id" : ObjectId("59db7bd22f02828b587ca88d"), "date" : ISODate("2014-01-01T07:03:00Z"), "sensor" : "sensor2", "metric" : 20 }
{ "_id" : ObjectId("59db7bd22f02828b587ca88e"), "date" : ISODate("2014-01-01T07:04:00Z"), "sensor" : "sensor2", "metric" : 21 }
我正在构建一个返回以下内容的查询:(假设我可以注入一组传感器。例如{ $in: ["sensor1", "sensor2"] }
{ "_id" : ObjectId("59db7bd22f02828b587ca88c"), "date" : ISODate("2014-01-01T07:02:00Z"), "sensor" : "sensor1", "metric" : 12 }
{ "_id" : ObjectId("59db7bd22f02828b587ca88e"), "date" : ISODate("2014-01-01T07:04:00Z"), "sensor" : "sensor2", "metric" : 21 }
这两个文件代表每个sensor
的最新文件。我可以用两个查询来做,每个传感器一个:
db.readings.find({"sensor": "sensor1"}).sort({date: -1}).limit(1)
db.readings.find({"sensor": "sensor2"}).sort({date: -1}).limit(1)
但我想了解它是否可以作为一个查询完成。同样,我可以获得的唯一数据是传感器组。虽然上面的示例查询仅限于返回一个文档,但理想情况下我想要求n
个读数,因此每个传感器中返回的文档集始终为n
。
我可以使用下面评论中提到的聚合框架,但我只能得到一个。即。{$first:"$$ROOT"}
。我想获得n
个文档,因此类似{$push:"$$ROOT", $limit:2}
的内容会很棒,但这并不存在。还有其他选择吗?