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

问题描述:

我是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 
    ]) 
+0

我不想设定DeviceLogId'的'。我只想要一个具有最大“LogDateTime”的'DeviceLogId'。 – shashwat

+0

你测试了我给你的代码吗? – Atchoum

+0

是的,我试过了。它给了我一个'DeviceLogIDs'数组。我不知道选哪一个。 – shashwat

添加设备ID在小组赛阶段的阵列,

Device:{$addToSet:deviceId}