我有一个像这样的数据集:
{
"_id" : ObjectId("5bacc9295af10e2764648baa"),
"slug" : ["Maruti", "Honda"],
"page" : "Ford"
},
{
"_id" : ObjectId("5bacc9295af10e2764648bab"),
"slug" : ["Maruti", "Honda", "Tata"],
"page" : "Hyundai"
},
{
"_id" : ObjectId("5bacc9295af10e2764648bac"),
"slug" : ["Maruti"],
"page" : "Ford"
},
{
"_id" : ObjectId("5bacc9295af10e2764648bad"),
"slug" : ["Ford", "Hyundai"],
"page" : "Tata"
}
现在,如果我想获取Page的重复计数,那么我将像这样进行汇总查询:
MyCollectionName.aggregate([
{ $unwind: { path: "$page" } },
{ $group: { _id: "$page", count: { $sum: 1 } } },
{
$project: {
_id: 0,
vehiclename: "$_id",
count: { $multiply: ["$count", 1] }
}
},
{ $sort: { count: -1 } }
])
.then(data => {
console.log(data)
//get the result like this which is fine
[
{ vehiclename : 'Ford', count: 2},
{ vehiclename : 'Hyundai', count: 1},
{ vehiclename : 'Tata', count: 1}
]
})
.catch(e => {
console.log(e)
})
类似地,如果我对Slug进行查询,那么我的查询将如下所示:
MyCollectionName.aggregate([
{ $unwind: { path: "$slug" } },
{ $group: { _id: "$slug", count: { $sum: 1 } } },
{
$project: {
_id: 0,
vehiclename: "$_id",
count: { $multiply: ["$count", 1] }
}
},
{ $sort: { count: -1 } }
])
.then(data => {
console.log(data)
//get the result like this which is fine
[
{ vehiclename : 'Maruti', count: 3},
{ vehiclename : 'Honda', count: 2},
{ vehiclename : 'Tata', count: 1},
{ vehiclename : 'Ford', count: 1},
{ vehiclename : 'Hyundai', count: 1}
]
})
.catch(e => {
console.log(e)
})
现在我要在单个查询而不是单独查询上执行此操作。
我对使用unwind和在单个查询中获得两个组合值后感到困惑。
所需的输出将如下所示:
[
{ vehiclename : 'Maruti', count: 3},
{ vehiclename : 'Ford', count: 3},
{ vehiclename : 'Honda', count: 2},
{ vehiclename : 'Tata', count: 2},
{ vehiclename : 'Hyundai', count: 1}
]
真的很感谢任何帮助。
答案 0 :(得分:0)
我找到了解决方案。如果我做错了,请通知。.
MyCollectionName.aggregate([
{
$facet: {
groupByPage: [
{ $unwind: "$page" },
{
$group: {
_id: "$page",
count: { $sum: 1 }
}
}
],
groupBySlug: [
{ $unwind: "$slug" },
{
$group: {
_id: "$slug",
count: { $sum: 1 }
}
}
]
}
},
{
$project: {
pages: {
$concatArrays: ["$groupByPage", "$groupBySlug"]
}
}
},
{ $unwind: "$pages" },
{
$group: {
_id: "$pages._id",
count: { $sum: "$pages.count" }
}
},
{ $sort: { count: -1 } }
])
.then(data => {
console.log(data)
})
.catch(e => {
console.log(e)
})