Mongodb 具有数组和$lookup sum的mongo聚合

Mongodb 具有数组和$lookup sum的mongo聚合,mongodb,Mongodb,发票表 { "_id" : 123 "dueDate" : 1494858422, "invoiceLines" : [ { "lineText" : "Rent Price", "amountTotal" : 5000 }, { "lineText" : "Discount", "amountTotal" : -100

发票表

{ 
    "_id" : 123
    "dueDate" : 1494858422, 
    "invoiceLines" : [
        {
            "lineText" : "Rent Price", 
            "amountTotal" : 5000
        }, 
        {
            "lineText" : "Discount", 
            "amountTotal" : -1000
        }, 
        {
            "lineText" : "Final cleaning", 
            "amountTotal" : 500
        } 
    ], 
    "paid" : false
}
{ 
    "_id" : 20,
    "invoiceNo" : 123,
    "amount" : 2000
},
{ 
    "_id" : 21,
    "invoiceNo" : 123,
    "amount" : 1000 
}
接收表

{ 
    "_id" : 123
    "dueDate" : 1494858422, 
    "invoiceLines" : [
        {
            "lineText" : "Rent Price", 
            "amountTotal" : 5000
        }, 
        {
            "lineText" : "Discount", 
            "amountTotal" : -1000
        }, 
        {
            "lineText" : "Final cleaning", 
            "amountTotal" : 500
        } 
    ], 
    "paid" : false
}
{ 
    "_id" : 20,
    "invoiceNo" : 123,
    "amount" : 2000
},
{ 
    "_id" : 21,
    "invoiceNo" : 123,
    "amount" : 1000 
}
我想要的结果

{
    "_id" : 123,
    "dueDate" : 1494858422,
    "invoiceTotal" : 4500,
    "receiptTotal" : 3000
}
所以我想把所有的发票行.总金额加在一起,得到所有的收据,并把它们的金额加在一起

问题是结果显示
invoiceTotal:0

以下是我的总结:

db.getCollection('invoice').aggregate([
{
    $match: {
        "dueDate"  : {$lte: (1498988330)},
        "paid" : false
    }
},
{
    $lookup: {
        from: "receipt",
        localField: "_id",
        foreignField: "invoiceNo",
        as: "receipt"
    }
},
{
    $project:{
        "_id": 1,
        "dueDate": 1,
        "invoiceTotal": {
            "$sum": {
                "$map": {
                    "input": "$invoice.invoiceLines",
                    "as": "il",
                    "in": "$$il.amountTotal"
                }
            }
        },
        "receiptTotal": {
            "$sum": {
                "$map": {
                    "input": "$receipt",
                    "as": "re",
                    "in": "$$re.amount"
                }
            }
        }
    }
}])
我试过了

{
    $unwind: "$invoice.invoiceLines" 
}, 

但是我没有得到任何结果

不需要集合名称前缀。尝试
“输入”:“$invoiceLines”
。向救援队求助!!成功了。这一个实际上是建立在你教我的另一个疯狂的聚合上的。所以这次我差点就拿到了:-)好吧,维拉姆,让我们来挑战一下。假设我想添加
“lineText”:“租金”
从第一个
invoiceLine
到我的
$project
-你会怎么做?Hmmm
“invoiceLines.lineText”:1,
给了我所有的(当然),但是
“invoiceLines[0].lineText”:1,
什么都没有给我。是否有
$first
命令或我可以使用的东西?请尝试
“lineText”:{$arrayElemAt:[“$invoiceLines.lineText”,0]}