2015-04-03 3 views
1

В коллекции есть много предметов, каждая из которых имеет много записей, некоторые из них имеют записи о новых датах, а некоторые имеют неделю или месяц и старше. Мне нужен запрос, который возвращает последнюю последнюю запись каждого элемента. В случае с .aggregate() мне нужны полные «данные». Я хочу этот результат, используя mongodb $ group, запись должна быть последней для каждого устройства.Последние записи по дате для каждого элемента группы mongodb

{ 
    "result" : [ 
     { 
      "_id" : 29, 
      "gateway_id" : 1, 
      "data" : [ 
       { 
        "r" : 203, 
        "v" : 3002 
       }, 
       { 
        "r" : 221, 
        "v" : 3006 
       } 
      ], 
      "device_id" : 29, 
      "date_time" : "a" 
     }, 
     { 
      "_id" : 28, 
      "gateway_id" : 1, 
      "data" : [ 
       { 
        "r" : 203, 
        "v" : 3002 
       }, 
       { 
        "r" : 221, 
        "v" : 3006 
       } 
      ], 
      "device_id" : 28, 
      "date_time" : "b" 
     }, 
     { 
      "_id" : 27, 
      "gateway_id" : 1, 
      "data" : [ 
       { 
        "r" : 203, 
        "v" : 3642 
       }, 
       { 
        "r" : 221, 
        "v" : 3666 
       } 
      ], 
      "device_id" : 27, 
      "date_time" : "a" 
     } 
    ], 
    "ok" : 1 
} 

Я хочу этот результат, используя mongodb $ group, запись должна быть последней для каждого устройства.

ответ

2

Попробуйте со следующим фрагментом

db.collection.aggregate([ 
      {$group: { 
       "_id": "$device_id", 
       "gateway_id": {"$last":"$gateway_id"}, 
       data: {$last: '$data'}, 
       date: {$last: '$date_time'}, 
      }}, 
     {$project: { 
       "device_id": "$_id", 
        "gateway_id": "$gateway_id", 
        "data": "$data", 
        "date_time": "$date" 
       }}, 
     {$sort: { 
       'date': -1 
      }} 
    ]) 

В вышеуказанной группе запроса по идентификатору устройства и дата, данные, и gateway_id будет последним в каждой строке.

+0

Спасибо # Sajjad, это работает для меня – Manahil

+0

Добро пожаловать –