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]}