#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" } } }
]
);