MongoDB - 获取集合的每个值的每个字段的计数摘要
MongoDB - Get a summary of the count for each field for each value of a collection
我想获得集合中每个值的每个字段的计数摘要。
示例:
集合可能包含以下文档架构和值:
{
shop: A, B, C, D
fruits: banana, apple, kiwi
region: north, south, west, east
}
目标:
我想得到一个文档作为结果,每个值的计数如下:
{
shop: {
A: 2,
B: 5,
C: 3,
D: 1
},
fruits: {
banana: 3,
apple: 2,
kiwi: 1
}
...
}
mongo 怎么可能?
感谢您的帮助!
$facet
分隔所有三个字段的结果
$project
shop
仅字段
$unwind
解构shop
数组
$group
通过 shop
得到计数
$project
仅将键显示为 shop
,将值显示为 count
- 其他 2 个数组
fruits
和 region
的过程相同
$arrayToObject
将键值数组转换为对象格式
db.collection.aggregate([
{
$facet: {
shop: [
{ $project: { shop: 1 } },
{ $unwind: "$shop" },
{ $group: { _id: "$shop", count: { $sum: 1 } } },
{ $project: { _id: 0, k: "$_id", v: "$count" } }
],
fruits: [
{ $project: { fruits: 1 } },
{ $unwind: "$fruits" },
{ $group: { _id: "$fruits", count: { $sum: 1 } } },
{ $project: { _id: 0, k: "$_id", v: "$count" } }
],
region: [
{ $project: { region: 1 } },
{ $unwind: "$region" },
{ $group: { _id: "$region", count: { $sum: 1 } } },
{ $project: { _id: 0, k: "$_id", v: "$count" } }
]
}
},
{
$project: {
shop: { $arrayToObject: "$shop" },
fruits: { $arrayToObject: "$fruits" },
region: { $arrayToObject: "$region" }
}
}
])
我想获得集合中每个值的每个字段的计数摘要。
示例:
集合可能包含以下文档架构和值:
{
shop: A, B, C, D
fruits: banana, apple, kiwi
region: north, south, west, east
}
目标: 我想得到一个文档作为结果,每个值的计数如下:
{
shop: {
A: 2,
B: 5,
C: 3,
D: 1
},
fruits: {
banana: 3,
apple: 2,
kiwi: 1
}
...
}
mongo 怎么可能?
感谢您的帮助!
$facet
分隔所有三个字段的结果$project
shop
仅字段$unwind
解构shop
数组$group
通过shop
得到计数$project
仅将键显示为shop
,将值显示为count
- 其他 2 个数组
fruits
和region
的过程相同
$arrayToObject
将键值数组转换为对象格式
db.collection.aggregate([
{
$facet: {
shop: [
{ $project: { shop: 1 } },
{ $unwind: "$shop" },
{ $group: { _id: "$shop", count: { $sum: 1 } } },
{ $project: { _id: 0, k: "$_id", v: "$count" } }
],
fruits: [
{ $project: { fruits: 1 } },
{ $unwind: "$fruits" },
{ $group: { _id: "$fruits", count: { $sum: 1 } } },
{ $project: { _id: 0, k: "$_id", v: "$count" } }
],
region: [
{ $project: { region: 1 } },
{ $unwind: "$region" },
{ $group: { _id: "$region", count: { $sum: 1 } } },
{ $project: { _id: 0, k: "$_id", v: "$count" } }
]
}
},
{
$project: {
shop: { $arrayToObject: "$shop" },
fruits: { $arrayToObject: "$fruits" },
region: { $arrayToObject: "$region" }
}
}
])