假设一组人员,每个人都有一组位置子文档,其中一些包括"未来"位置:
{ "_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
。