Mongodb聚合可以基于日期从子文档数组中投影单个子文档吗



假设一组人员,每个人都有一组位置子文档,其中一些包括"未来"位置:

{ "_id" : 1, "name": "Homer", "itinerary": [ { date: "...", "location": "Springfield" }, { date: "...", "location": "London" } ] }
{ "_id" : 2, "name": "Bart", "itinerary": [ { date: "...", "location": "Las Vegas" }, { date: "...", "location": "Houston" } ] }
{ "_id" : 3, "name": "Marge", "itinerary": [ { date: "...", "location": "Washington" }, { date: "...", "location": "Springfield" } ] }
{ "_id" : 4, "name": "Lisa", "itinerary": [ { date: "...", "location": "London" }, { date: "...", "location": "Paris" } ] }

是否可以编写一个mongodb聚合,返回截至目前每个人的位置:

{ "_id" : 1, "name": "Homer", "currentLocation": { date: "...", "location": "Springfield" } }
{ "_id" : 2, "name": "Bart", "currentLocation": { date: "...", "location": "Houston" } }
{ "_id" : 3, "name": "Marge", "currentLocation": { date: "...", "location": "Washington" } }
{ "_id" : 4, "name": "Lisa", "currentLocation": { date: "...", "location": "Paris" } }

您可以从mongo 3.2:开始执行此操作

db.collection.aggregate([{
  $match: {...}
}, {
  $set: {
    "currentLocation": {
       $arrayElemAt: [
         {$filter: 
           {input: "$itinerary", cond: {$eq: ["$$this.date", "present"]}}
         }, 
       0]
    }
  }
}, {
  $unset: {"itinerary": 1}
}]);

$unset$set是在4.2中添加的,但您可以使用$project

相关内容

  • 没有找到相关文章

最新更新