Выбор отличных атрибутов от других отличных атрибутов

#mongodb

#mongodb

Вопрос:

Я пересматриваю старый проект, в котором я впервые использовал MongoDB. В этом проекте моя модель определяется как:

 var ItemSchema = new mongoose.Schema({
  name: {type: String},
  category: {type: String},
  subcategory: {type: String},
  status: {type: String},
  description: {type: String},
  value: {type: Number, default: 1}
});
  

Items Коллекция содержит сотни документов в этом формате.

Теперь я пытаюсь вернуть список отличных Category атрибутов со всеми Subcategory вложенными в них связанными отличительными атрибутами. Желаемый результат будет выглядеть примерно так:

 {
    "CategoryName1": [
        "SubcategoryName",
        "SubcategoryName",
        "SubcategoryName",
        ...
    ],
    "CategoryName2": [
        "SubcategoryName",
        "SubcategoryName",
        "SubcategoryName",
        ...
    ]
}
  

С текущей моделью, которая у меня есть, и с каждой категорией и подкатегорией, перечисляемой более одного раза для каждого элемента, возможен ли такой тип запроса? Или потребуется реструктуризация данных? Поскольку это была моя первая попытка, я не против переформатирования данных.

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

1. Звучит как задание для $group .

2. Просто читал об этом, собирался протестировать несколько вещей, а затем отчитаться.

Ответ №1:

Добился этого, используя следующее:

 db.items.aggregate(
   [
     { $group : { _id : "$category", subcategory: { $addToSet: "$subcategory" } } }
   ]
);