获取另一个字段的聚合记录
问题描述:
我是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")
}
我想用组通过查询每个用户的DeviceId
最大LogDateTime
。
我已经写了如下查询组,但不知道如何获得每条记录的DeviceLogId
。
collectionName.aggregate(
[{
$match: { LogDateTime: { $gt: todaysDateStart, $lt: todayDateEnd } }
}, {
$group: {
_id: "$UserId",
maxPunchTime: { $max: { $add: [ "$LogDateTime", 330*60000 ] } },
}
}])
在MSSQL中,我可以很容易地使用嵌套查询,但我不知道如何实现在MongoDB中。
在此先感谢。
答
使用$addToSet Group Accumulator:
collectionName.aggregate(
[{
$match: { LogDateTime: { $gt: todaysDateStart, $lt: todayDateEnd } }
}
, {
$group: {
_id: "$UserId",
maxPunchTime: { $max: { $add: [ "$LogDateTime", 330*60000 ] } },
deviceLogIds:{$addToSet: "$DeviceLogId"} //<----
}
} ,
{ $sort: {"maxPunchTime" : -1} } , {$limit : 1} //Sort Descending + Limit to 1
])
答
添加设备ID在小组赛阶段的阵列,
Device:{$addToSet:deviceId}
我不想设定DeviceLogId'的'。我只想要一个具有最大“LogDateTime”的'DeviceLogId'。 – shashwat
你测试了我给你的代码吗? – Atchoum
是的,我试过了。它给了我一个'DeviceLogIDs'数组。我不知道选哪一个。 – shashwat