获取具有聚合的另一个字段的记录

时间:2016-05-14 11:46:51

标签: mongodb mongoose aggregation-framework

我是MongoDB世界的新手。

我在我的收藏中关注数据

{ 
    "_id" : ObjectId("5735d8d4d147aa34e440988f"), 
    "DeviceLogId" : "26962", 
    "DeviceId" : "10", 
    "UserId" : "78", 
    "LogDateTime" : ISODate("2016-05-12T07:52:44.000+0000")
}
{ 
    "_id" : ObjectId("5735d8d4d147aa34e4409890"), 
    "DeviceLogId" : "26963", 
    "DeviceId" : "10", 
    "UserId" : "342", 
    "LogDateTime" : ISODate("2016-05-12T07:54:09.000+0000")
}
{ 
    "_id" : ObjectId("5735d8d4d147aa34e4409891"), 
    "DeviceLogId" : "26964", 
    "DeviceId" : "10", 
    "UserId" : "342", 
    "LogDateTime" : ISODate("2016-05-12T07:54:10.000+0000")
}
{ 
    "_id" : ObjectId("5735d8d4d147aa34e4409892"), 
    "DeviceLogId" : "26965", 
    "DeviceId" : "10", 
    "UserId" : "78", 
    "LogDateTime" : ISODate("2016-05-12T07:54:27.000+0000")
}

我想使用group by查询每个用户DeviceId的最大LogDateTime

我已经按照下面的查询编写了一组,但不知道如何为每条记录获取DeviceLogId

collectionName.aggregate(
        [{
            $match: { LogDateTime: { $gt: todaysDateStart, $lt: todayDateEnd } }
        }, {
            $group: {
                _id: "$UserId",
                maxPunchTime: { $max: { $add: [ "$LogDateTime", 330*60000 ] } },
            }
        }])

在MSSQL中,我可以使用嵌套查询轻松完成,但我不知道如何在MongoDB中实现它。

提前致谢。

2 个答案:

答案 0 :(得分:2)

使用$addToSet Group Accumulator

else
  print("remove: q.data[q.first]= ", q.data[q.first], "  q.first= ", q.first)
  local rval = q.data[q.first]   <<< THIS rval ...
  print("remove: rval= ", rval)
  ....
end
return rval   **<<< ...is not the same variable as THIS rval.**

答案 1 :(得分:0)

将groupid添加到组阶段的数组中,

  Device:{$addToSet:deviceId}