我正在嘗試獲取每個公司每個月的交易計數,
我有以下格式的資料 -
[{
"id": "1",
"month": "October",
"company": "tesla",
"saleId": "111"
},
{
"id": "2",
"month": "October",
"company": "ford",
"saleId": "222"
},
{
"id": "3",
"month": "October",
"company": "tesla",
"saleId": "333"
},
{
"id": "4",
"month": "November",
"company": "tesla",
"saleId": "444"
},
{
"id": "5",
"month": "December",
"company": "kia",
"saleId": "555"
},
{
"id": "6",
"month": "December",
"company": "ford",
"saleId": "666"
}]
每個汽車制造商的每月預期產量 -
{
"October": [{
"company": "tesla",
"count": 2
},
{
"company": "ford",
"count": 1
}
],
"November": [{
"company": "tesla",
"count": 1
}],
"December": [{
"company": "kia",
"count": 1
},
{
"company": "ford",
"count": 1
}
]
}
我通過以下查詢設法得到了結果 -
let result = await con.aggregate([
{
$group : {
_id:{
month: "$month",
company: "$company",
},
count:{$sum:1}
}
}
]).toArray();
結果是——
[
{ _id: { month: 'October', company: 'tesla' }, count: 2 },
{ _id: { month: 'November', deliveryPartner: 'tesla' }, count: 1 },
{ _id: { month: 'October', deliveryPartner: 'ford' }, count: 1 },
{ _id: { month: 'December', deliveryPartner: 'ford' }, count: 1 },
{ _id: { month: 'December', deliveryPartner: 'kia' }, count: 1 },
]
但是我必須回圈結果才能將其轉換為預期的格式,
有沒有辦法在查詢級別處理它?
uj5u.com熱心網友回復:
你有正確的想法,你只需要繼續重組,我用這樣的方式實作了$replaceRoot
這個$arrayToObject
:
db.collection.aggregate([
{
$group: {
_id: {
month: "$month",
company: "$company"
},
count: {
$sum: 1
}
}
},
{
$sort: {
count: -1
}
},
{
$group: {
_id: "$_id.month",
v: {
$push: {
company: "$_id.company",
count: "$count"
}
}
}
},
{
$group: {
_id: null,
values: {
$push: {
k: "$_id",
v: "$v"
}
}
}
},
{
$replaceRoot: {
newRoot: {
"$arrayToObject": "$values"
}
}
}
])
蒙戈游樂場
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/520161.html
標籤:节点.jsmongodb
上一篇:如何將django'models.py'、'views.py'、'serializers.py'檔案拆分為多個檔案
下一篇:過濾嵌套物件的MongoDB陣列