首页 > 解决方案 > 从其他不同属性中选择不同属性

问题描述

我正在重温一个我第一次使用 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集合包含数百个这种格式的文档。

现在,我正在尝试返回 distinct 列表,Category其中包含所有相关的 distinctSubcategory嵌套在其中。所需的输出将类似于:

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

使用我拥有的当前模型,并且每个项目的每个类别和子类别都列出了不止一次,这种类型的查询是否可行?还是需要对数据进行重组?由于这是我的第一次尝试,我并不反对重新格式化数据。

标签: mongodb

解决方案


通过使用以下方法得到这个工作:

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

推荐阅读