2017-02-16 6 views
0

У меня есть следующие документы MongoDB:Возможно ли запрашивать и группировать документы MongoDB в массив поддоку?

{ 
    "_id" : ObjectId("58950c9c247430c8d9f3997c"), 
    "stamp_dt" : ISODate("2015-10-15T00:09:00.000+0000"), 
    "start_lat" : 52.49512579479001, 
    "asimId" : ObjectId("588fbe3b835262b7f5ede6f5") 
} 
{ 
    "_id" : ObjectId("58950c9c247430c8d9f3997d"), 
    "stamp_dt" : ISODate("2015-10-15T00:09:00.000+0000"), 
    "start_lat" : 52.48510698285751, 
    "asimId" : ObjectId("588fbe3b835262b7f5ede6f5") 
} 
{ 
    "_id" : ObjectId("58950c9c247430c8d9f3997e"), 
    "stamp_dt" : ISODate("2015-10-15T00:09:00.000+0000"), 
    "start_lat" : 52.49966542235, 
    "asimId" : ObjectId("588fbe3b835262b7f5ede6f5") 
} 
{ 
    "_id" : ObjectId("58950c9c247430c8d9f3997f"), 
    "stamp_dt" : ISODate("2015-10-15T00:09:00.000+0000"), 
    "start_lat" : 52.52645820975653, 
    "asimId" : ObjectId("588fbe3b835262b7f5ede6f5") 
} 

Обратите внимание, что все имеют одинаковое значение для stamp_dt. Мне нужен способ, чтобы сгруппировать эти документы, как это:

{ 
    "stamp_dt" : ISODate("2015-10-15T00:09:00.000+0000"), 
    "results": [ 
     { 
      "_id" : ObjectId("58950c9c247430c8d9f3997c"), 
      "start_lat" : 52.49512579479001, 
      "asimId" : ObjectId("588fbe3b835262b7f5ede6f5") 
     } 
     { 
      "_id" : ObjectId("58950c9c247430c8d9f3997d"), 
      "start_lat" : 52.48510698285751, 
      "asimId" : ObjectId("588fbe3b835262b7f5ede6f5") 
     } 
     { 
      "_id" : ObjectId("58950c9c247430c8d9f3997e"), 
      "start_lat" : 52.49966542235, 
      "asimId" : ObjectId("588fbe3b835262b7f5ede6f5") 
     } 
     { 
      "_id" : ObjectId("58950c9c247430c8d9f3997f"), 
      "start_lat" : 52.52645820975653, 
      "asimId" : ObjectId("588fbe3b835262b7f5ede6f5") 
     } 
    ] 
} 

Я мог бы сделать это с помощью кода, но есть способ сделать это с помощью запроса MongoDB (возможно, агрегация)?

+1

Вы можете попробовать что-то вроде этого. 'Db.collection.aggregate ( \t [{ \t \t $ Группа: { \t \t \t _id: "$ stamp_dt", \t \t \t "Результаты": { \t \t \t \t $ толчок: { \t \t \t \t \t _id: "$ _id", \t \t \t \t \t start_lat: "$ start_lat", \t \t \t \t \t asimId = "$ asimId" \t \t \t \t} \t \t \t} \t \t} \t}] ) ' – Veeram

+0

Спасибо! Это сработало. Если вы хотите опубликовать это в качестве ответа, я буду отмечать его как ответ и дать вам кредит. –

ответ

1

Вы можете попробовать что-то вроде ниже.

db.collection.aggregate(
    [{ 
     $group: { 
      _id: "$stamp_dt", 
      "data": { 
       $push: { 
        _id: "$_id", 
        start_lat: "$start_lat", 
        asimId: "$asimId" 
       } 
      } 
     } 
    }] 
) 

, и если вы не возражаете stamp_dt в массиве можно упростить запрос к

db.collection.aggregate(
    [{ 
     $group: { 
      _id: "$stamp_dt", 
      "data": { 
       $push: "$$ROOT" 
      } 
     } 
    }] 
) 
+0

Фантастический! Второй - особенно замечательный. В очередной раз благодарим за помощь. –