我有這樣的骨料的查找命令:貓鼬查找(加入)和項目只持續一個
aggregate.lookup({
from: 'phonecalls',
localField: 'phone',
foreignField: 'to',
as: 'phonecalls'
});
我只想得到最後的「phonecall」我做了(通過日期字段)。 我該怎麼做?
我有這樣的骨料的查找命令:貓鼬查找(加入)和項目只持續一個
aggregate.lookup({
from: 'phonecalls',
localField: 'phone',
foreignField: 'to',
as: 'phonecalls'
});
我只想得到最後的「phonecall」我做了(通過日期字段)。 我該怎麼做?
您可以將以下階段添加到您的聚合管道。
下面的查詢$unwind
phonecalls
到$sort
由date
遞減之後$limit
先doc和$project
的phonecalls
文件
{ $unwind:"$phonecalls" },
{ $sort:{ "phonecalls.date":-1 } },
{ $limit:1 },
{ $project:{ lastphonecall: "$phonecalls" } }
您可以添加以下聚集階段3.4版本。
下面的查詢將設置initialValue
到$phonecalls.date
第一個元素,隨後在date
如果真集$$this
到$$value
$ GT比較,如果假保持前值和$reduce
所有的值以找到最大日元素和$項目輸出phonecall
項目。
{
$project: {
phonecalls: {
$reduce: {
input: "$phonecalls",
initialValue:{
date:{
$let: {
vars: { obj: { $arrayElemAt: ["$phonecalls", 0] } },
in: "$$obj.date"
}
}
},
in: {
$cond: [{ $gt: ["$$this.date", "$$value.date"] }, "$$this", "$$value" ]
}
}
}
}
}
試試這個:
aggregate([
{ $lookup: {
from: 'phonecalls',
localField: 'phone',
foreignField: 'to',
as: 'phonecalls'
}
},
{ $unwind:"$phonecalls", preserveNullAndEmptyArrays: true },
{ $sort:{ "phonecalls.date":-1 } },
{ $limit:1 },
{ $project:{ lastphonecall: "$phonecalls" } }
]);
這是行不通的。這爲整個聚合提供了一個限制1。我想獲得所有我找到的項目,並且僅爲電話呼叫限制,而不是針對包含的查詢。 – user3712353