我是MongoDB聚合的新手。我目前有一个集合,我在其中保存了一些帐户名称:
帐户:_id:ObjectId; name:String
示例:项目:ObjectId(...)"银行帐户"等
最重要的是,我有一个期刊集合,我在其中存储会计日记帐分录。他们看起来如下:
期刊:_id:ObjectId,debit :(参考帐户ID),credit :(参考帐户ID);量
我的想法是,我保存如下的会计分录: 借记:(ID为"银行账户"),信用:(ID"股本和#34;)
现在,我正在尝试使用汇总获取所有帐户类型的总借记,总贷记和总金额(借方贷方)。
现在,我有点这只适用于一种特定的帐户类型:
db.journals.aggregate(
{ $project: {
_id: 0,
PosSentiment: {$cond: [{$eq: ['$debit', ObjectId("5a809cf86ce518470ec92502")]}, '$amount', 0]},
NegSentiment: {$cond: [{$eq: ['$credit', ObjectId("5a809cf86ce518470ec92502")]}, '$amount', 0]}
}},
{ $group: {
_id: 0,
debit: {$sum: '$PosSentiment'},
credit: {$sum: '$NegSentiment'}
}});
不幸的是,这只能为我在ObjectId中特定的一个类型的帐户提供信用和借记,我没有总数,我必须为每个帐户运行此帐户。
是否有可能使用聚合来结束这样的结果 [{_id:...,名称(来自帐户集合),totaldebit,totalcredit,total}]?
非常感谢!
答案 0 :(得分:1)
您可以使用以下聚合。
db.journals.aggregate([
{"$lookup":{
"from":"accounts",
"localField":"debit",
"foreignField":"_id",
"as":"debit"
}},
{"$lookup":{
"from":"accounts",
"localField":"credit",
"foreignField":"_id",
"as":"credit"
}},
{"$project":{
"data":[
{name:"$debit","type":"debit"},
{name:"$credit","type":"credit"}
],
"amount":1
}},
{"$unwind":"$data"},
{"$group":{
"_id":{"account":{"$arrayElemAt":["$data.name",0]},"type":"$data.type"},
"total":{"$sum":"$amount"}
}},
{"$group":{
"_id":"$_id.account._id",
"name":{"$first":"$_id.account.name"},
"balances":{$push:{"type":"$_id.type","total":"$total"}},
"alltotal":{"$sum":"$total"}
}}
])