Группировка агрегации MongoDB из нескольких документов

#node.js #mongodb #typeorm #node.js-typeorm

#node.js #mongodb #типирование #node.js-typeorm

Вопрос:

Итак, в моем проекте у меня есть 2 такие коллекции:

Показать коллекцию комнат

 {
    "_id":"5fdb3d5e253c844c1bd120c7",
    "name": "Car Showroom 1",  //show room
    "soldUnits": 4,
    "totalUnits": 10,
    "epochTime": 1608210104,
    "market": "area_name_1"  //market
}
 

Эти документы добавляются каждый день, кроме того, show room их может быть несколько markets .

Сбор рынка

 {
    "id": "area_name_1",
    "name": "Some Place Name",
    "imageURL": "https://example.org/favicon.png"
}
 

Теперь мне нужно отобразить данные по следующему шаблону:

     "showroom": {
        "name": "Car Showroom 1",
        "epochTime": 1608210104
    },
    "markets": [
        {
            "area": {
                "id": "area_name_1",
                "name": "Some Place Name",
                "imageURL": "https://example.org/favicon.png"
            },
            "soldUnits": 2,
            "totalUnits": 10
        },
        {
            "area": {
                "id": "area_name_2",
                "name": "Some Place Name",
                "imageURL": "https://example.org/favicon.png"
            },
            "soldUnits": 9,
            "totalUnits": 20
        }
    ]
}
 

Я использовал обычные методы агрегации, но, похоже, не могу найти решение для этого.

Приложение представляет собой приложение NodeJS (с использованием NextJS и TypeORM).

Кроме того, я довольно новичок в mongodb, поэтому помощь действительно ценится.

PS. Я думаю, что некоторые дубликаты будут присутствовать, поэтому было бы очень полезно указать мне, что я пропустил.

Ответ №1:

Вы пытались использовать $lookup?

 {
   $lookup:
     {
       from: <collection to join>,
       localField: <field from the input documents>,
       foreignField: <field from the documents of the "from" collection>,
       as: <output array field>
     }
}
 

https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/

Комментарии:

1. Спасибо @daniel за ответ, но я знаю, что это не то, что я ищу, мне нужно markets , чтобы массив был заполнен с использованием самых последних значений market поля.