mongodb查询基于文档的多个属性,返回包含每个属性计数的对象数组



我正在使用MongoDB开发nodeJS应用程序,我正在努力构建一个查询。我已经浏览了MongoDB文档和聚合概念,但仍然无法管理它

因此,我收集了一组Item文档,如下所示:

Item schema -> { id: number, status: string, category: string, subCategory: string }
E.g.:
[
...
{
id: 38219388214034,
status: 'inStock',
category: 'Food',
subCategory: 'Sweet'
},
{
id: 18371917455611,
status: 'pending',
category: 'Accessories',
subCategory: 'Other'
}
...
]

status只能具有三种状态中的一种:inStockoutOfStockpendingsubCategorycategory(是另一个集合,Category集合(具有以下关系:

Category schema -> { category: string, subCategory: Array<string> }
E.g.:
[
...
{ category: 'Food', subCategory: ['Sour', 'Sweet', 'Other'] },
{ category: 'Sports', subCategory: ['T-Shirt', 'Shorts', 'Ball', 'Other'] },
{ category: 'Accessories', subCategory: ['Drill Bits', 'Screws', 'Fluids', 'Other'] }
...    
]

我试图实现的是创建一个查询,返回一个对象数组,其中包含与其类别相关的每个子类别的计数,如:

待处理>>//tr>0>>>42
子类别类别inStockoutOfStock项目总数
酸味食品316
其他食品812其他附件

一个选项是categorysubCategory同时使用$group,因此结果是一个文档,每个categorysubCategory对都有所有status选项:

编辑

db.items.aggregate([
{$group: {
_id: {
subCategory: "$subCategory",
category: "$category"
},
totalCount: {$sum: 1},
pending: {$sum: {$cond: [{$eq: ["$status", "pending"]}, 1, 0]}},
inStock: {$sum: {$cond: [{$eq: ["$status", "inStock"]}, 1, 0]}},
outOfStock: {$sum: {$cond: [{$eq: ["$status", "outOfStock"]}, 1, 0]}}
}
}
])

看看它是如何在操场上工作的例子

相关内容

  • 没有找到相关文章

最新更新