我对MongoDB聚合完全陌生。目前,我有一个集合,其中保存了几个帐户名:
accounts:_id: ObjectId;name: String
示例:项目:ObjectId(.)“银行帐户”等
最重要的是,我有一个日记账收集,在其中我存储会计日记账分录。它们看起来如下:
日记账:_id: ObjectId,借方:(参考帐户id),贷方:(参考帐户id);金额
我的想法是,我保存的会计分录如下:借方:(“银行账户”的Id),信贷:(“股本”的Id)
现在,我试图使用所有帐户类型的总借方、总贷款额和总金额(借方-贷方)。
现在,我只对一种特定的帐户类型使用类型的:
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:.,名称(来自帐户集合)、总借方、总贷方、总计}
非常感谢!
发布于 2018-02-16 03:56:48
您可以使用下面的聚合。
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"}
}}
])https://stackoverflow.com/questions/48816217
复制相似问题