需要对需要的文档进行汇总,我必须将文档的一个字段的值映射为键,并将其余字段的值映射为键。
我尝试使用$ group和$ map管道阶段的聚合,但是无法获得所需的结果。但是,我可以聚合并将结果作为数组获取。
提供馆藏文件-
[{
"_id" : ObjectId("5cf9eeb857f64ce5589546f8"),
"payment" : "poli",
"walletName" : "USDT",
"balance" : 30000.0,
"available" : 29000.0
},
{
"_id" : ObjectId("5cf9eed957f64ce5589546fa"),
"payment" : "poli",
"walletName" : "BTC",
"balance" : 15,
"available" : 13
},
{
"_id" : ObjectId("5cf9ef0f57f64ce5589546fc"),
"payment" : "nopoli",
"walletName" : "BTC",
"balance" : 15,
"available" : 12
},
{
"_id" : ObjectId("5cf9ef3957f64ce5589546ff"),
"payment" : "nopoli",
"walletName" : "USDT",
"balance" : 30000.0,
"available" : 29000.0
},
{
"_id" : ObjectId("5cf9ef4057f64ce558954700"),
"payment" : "nopoli",
"walletName" : "USD",
"balance" : 30000.0,
"available" : 29000.0
}]
预期结果-
{
poli: { USDT : { "balance" : 30000.0,
"available" : 29000.0
},
BTC: { "balance" : 15,
"available" : 13
}
},
nopoli: { USDT : { "balance" : 30000.0,
"available" : 29000.0
},
BTC: { "balance" : 15,
"available" : 13
},
USD : { "balance" : 30000.0,
"available" : 29000.0
}
}
}
当前使用-
[{
payment: 'poli',
wallets: [{
"name": 'USDT',
"balance" : 30000.0,
"available" : 29000.0
},
{
"name": 'BTC',
"balance" : 15,
"available" : 13
}]
},
{
payment: 'nopoli',
wallets: [{
"name": 'USD',
"balance" : 30000.0,
"available" : 29000.0
},
{
"name": 'USDT',
"balance" : 15,
"available" : 13
},
{
"name": 'BTC',
"balance" : 30000.0,
"available" : 29000.0
}]
}]
根据客户的要求,请告知我是否可能这样做-对于每种付款方式(poli,nopoli),我们都必须尝试可用的付款方式(USDT,BTC,USD)。因此,将有太多组合需要验证。而且,如果我将结果投影为数组,那么每次需要验证特定组合时,我都必须遍历。
所以我认为遍历(在这样的对象中)既容易又高效。请帮助我弄清楚我的方法是否正确,任何建议将不胜感激。谢谢。