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
集合包含数百个这种格式的文档。
现在,我正在尝试返回 distinct 列表,Category
其中包含所有相关的 distinctSubcategory
嵌套在其中。所需的输出将类似于:
{
"CategoryName1": [
"SubcategoryName",
"SubcategoryName",
"SubcategoryName",
...
],
"CategoryName2": [
"SubcategoryName",
"SubcategoryName",
"SubcategoryName",
...
]
}
使用我拥有的当前模型,并且每个项目的每个类别和子类别都列出了不止一次,这种类型的查询是否可行?还是需要对数据进行重组?由于这是我的第一次尝试,我并不反对重新格式化数据。
解决方案
通过使用以下方法得到这个工作:
db.items.aggregate(
[
{ $group : { _id : "$category", subcategory: { $addToSet: "$subcategory" } } }
]
);
推荐阅读
- python - 获得非常高的平方误差值和奇怪的斜率
- javascript - 如何读取多个复选框(以及与之关联的数据)?
- javascript - 解析事件对象数组并匹配具有正确开始停止日期的状态集
- javascript - 当用户点击地址栏输入使用 JQuery 或 JS 时,如何防止网页重新加载
- postgresql - 在 python 和 postgresql 中导致零插入/更新问题
- javascript - 如何创建一个可以有多个视图并使用鼠标滚动在它们之间切换的视图?
- python - Channel.fetch_message(id) 没有返回想要的结果
- serverless-framework - 无服务器选项作为选项不起作用的默认值
- docker - 使用 nginx 和 dockerize flask 应用程序部署 Python 应用程序
- java - 在 ListView 上实现搜索功能