我是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中实现它。
提前致谢。
答案 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}