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

问题描述 投票:0回答:1

我正在重新审视一个我第一次使用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",
        ...
    ]
}

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

mongodb
1个回答
1
投票

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

db.items.aggregate(
   [
     { $group : { _id : "$category", subcategory: { $addToSet: "$subcategory" } } }
   ]
);
© www.soinside.com 2019 - 2024. All rights reserved.