2017-04-13 27 views

回答

0

您可以將以下階段添加到您的聚合管道。

下面的查詢$unwindphonecalls$sortdate遞減之後$limit先doc和$projectphonecalls文件

{ $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" ] 
       } 
      } 
     } 
    } 
} 
1

試試這個:

aggregate([ 
    { $lookup: { 
      from: 'phonecalls', 
      localField: 'phone', 
      foreignField: 'to', 
      as: 'phonecalls' 
     } 
    }, 
    { $unwind:"$phonecalls", preserveNullAndEmptyArrays: true }, 
    { $sort:{ "phonecalls.date":-1 } }, 
    { $limit:1 }, 
    { $project:{ lastphonecall: "$phonecalls" } } 
]); 
+0

這是行不通的。這爲整個聚合提供了一個限制1。我想獲得所有我找到的項目,並且僅爲電話呼叫限制,而不是針對包含的查詢。 – user3712353