如何按猫鼬中的字段对记录进行分组?

pme*_*ino 1 javascript mongoose mongodb nosql node.js

我有一个 MongoDB 文档,其中包含如下所示的记录:

[
  { _id: id, category_name: 'category1', parent_category: null },
  { _id: id, category_name: 'category2', parent_category: null },
  { _id: id, category_name: 'subcategory1', parent_category: id_parent_1 },
  { _id: id, category_name: 'subcategory2', parent_category: id_parent_1 },
  { _id: id, category_name: 'subcategory3', parent_category: id_parent_2 },
  { _id: id, category_name: 'subcategory4', parent_category: id_parent_2 }
]
Run Code Online (Sandbox Code Playgroud)

如您所见,我使用parent_categoryof存储类别null,子类别具有父类别的 ID。我正在寻找的是将这些分组为某种格式,如下所示:

[
  { category_name: 'category1', categories: [
       { category_name: 'subcategory1', _id: id },
       { category_name: 'subcategory2', _id: id }
    ]
  },
  { category_name: 'category2', categories: [
       { category_name: 'subcategory3', _id: id },
       { category_name: 'subcategory4', _id: id }
    ]
  }
]
Run Code Online (Sandbox Code Playgroud)

因此,基本上将父类别与带有子类别的数组进行分组。我正在使用猫鼬。我尝试使用 MongoDB 提供的聚合框架,但无法获得所需的结果。:(

我有权以任何可能需要的方式修改架构!

提前致谢!

jac*_*ter 5

似乎您将 Mongo 视为关系数据库(分离所有这些字段并将它们与查询结合在一起)。你应该做的是重建你的架构。例如:

var CategorySchema = new Schema({
   category_name: String,
   subCategories:[subCategorySchema]
}

var subCategorySchema = new Schema({
   category_name: String
})
Run Code Online (Sandbox Code Playgroud)

这样,当您需要查询集合时,这很简单

db.find({category_name: "name of the category"}, function(){})
Run Code Online (Sandbox Code Playgroud)

得到你需要的一切。

以防万一:您可以通过简单的更新将子类别添加到数组中。阅读本文了解更多信息。