从其他不同的属性中选择不同的属性

时间:2019-04-11 15:09:16

标签: 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 个答案:

答案 0 :(得分:1)

通过使用以下内容来完成这项工作:

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