Mongo DB - Как получить групповые продукты на основе поставщика?

Мне нужна ваша помощь. Учитывая приведенную ниже структуру, мне нужно запросить документ таким образом, чтобы получить все «продукты» для данного поставщика.

{
    "supplier" : [ 
        {"name" : "supplier 1",
            "products" : [
                { "name" : "product 1" }
                { "name" : "product 2" }
            ]
        },
        {
         "name" : "supplier 1",
             "products" : [
                { "name" : "product 3" }
            ]
        },
        {
         "name" : "supplier 2",
             "products" : [
                { "name" : "product 3" }
            ]
        },
    ]
}

Результирующий документ для «поставщика 1» должен быть следующим (или подобным).

{
    "products" : [
        { "name" : "product 1" },
        { "name" : "product 2" },
        { "name" : "product 3" }
    ]
      
}

Результат должен содержать только уникальные значения для products. Какое хорошее серверное решение для этого? Заранее спасибо.

Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
0
121
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  • $unwind деконструировать supplier массив
  • $group на supplier.name и сделать массив из products
  • $project для отображения обязательных полей, $reduce для повторения цикла products и объединения массивов или продуктов с использованием $concatArrays
db.collection.aggregate([
  { $unwind: "$supplier" },
  {
    $group: {
      _id: "$supplier.name",
      products: { $push: "$supplier.products" }
    }
  },
  {
    $project: {
      _id: 0,
      name: "$_id",
      products: {
        $reduce: {
          input: "$products",
          initialValue: [],
          in: { $concatArrays: ["$$this", "$$value"] }
        }
      }
    }
  }
])

Детская площадка

Большое спасибо! Это работает отлично. Я не знал о функции $reduce/$concathArrays. Это было действительно полезно! счастливого рождества

qhaut 21.12.2020 17:38

Другие вопросы по теме