У меня есть такой набор данных:
{
"_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"
}
Теперь, если я хочу получить число повторений страницы, я сделаю общий запрос следующим образом:
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)
})
Теперь я хочу сделать это для одного запроса вместо отдельного запроса.
Я немного запутался в использовании размотки и после получения значения обеих комбинаций в одном запросе.
Желаемый результат будет выглядеть так:
[
{ vehiclename : 'Maruti', count: 3},
{ vehiclename : 'Ford', count: 3},
{ vehiclename : 'Honda', count: 2},
{ vehiclename : 'Tata', count: 2},
{ vehiclename : 'Hyundai', count: 1}
]
Любая помощьдействительно ценится.