我在MongoDB中有10,000个读数(文档),我有一个deviceIds数组。我需要为Mongoose提供最后为每个设备创建的文档。
我的方法:
Reading.find({
"deviceId": { "$in": deviceIds}
},
function(err, readings) {
callback(err,readings);
}).sort({createdAt:-1}).limit(1);
这显然只返回一个文档。我需要在deviceIds数组中为每个deviceId获取一个。
编辑21/02/2018:感谢@mickl的帮助,我将代码更改为:
Reading.aggregate([
{ $match: { "deviceId": { "$in": finalDevices} } },
{
$group: {
deviceId: "$deviceId",
maxCreatedAt: { $max: "$createdAt" }
}
}
],function(err, reading) {
if (err) {
callback(err, null);
} else {
callback(null, reading)
}
})
现在我收到以下错误:"字段' deviceId'必须是累加器对象"
答案 0 :(得分:1)
您可以使用汇总框架$match
将您的收藏集过滤到指定的设备,然后使用$group
与$max一起获取日期。
Device.aggregate([
{ $match: { "deviceId": { "$in": deviceIds} } },
{
$group: {
_id: "$deviceId",
maxCreatedAt: { $max: "$createdAt" }
}
}
],function(err, readings) {
callback(err,readings);
})