【发布时间】:2017-02-21 05:44:07
【问题描述】:
我的 Mongo 数据库中有以下架构:
[
{
departureAirport: "JFK",
arrivalAirport: "FRA",
departureDate: "2017-02-22T04:00:00.000Z",
arrivalDate: "2017-02-22T09:45:00.000Z",
flightNumber: "FOOBAR",
availableSeats: 9,
cheapestFare: 65.99
}
]
在这个数据库中有几千行不同的出发机场、到达机场和日期。
现在我想对结果进行分组以获得每个到达机场每月最便宜的价格,如下所示:
[
{
arrivalAirport: "FRA",
fares: [
{'2017-02': 65.99},
{'2017-03': 65.99}
]
},
{
arrivalAirport: "JFK",
fares: [
{'2017-02': 65.99},
{'2017-03': 65.99}
]
}
]
甚至更好:
[
{
arrivalAirport: "FRA",
fares: {
'2017-02': 65.99,
'2017-03': 65.99
}
},
{
arrivalAirport: "JFK",
fares: {
'2017-02': 65.99,
'2017-03': 65.99
}
}
]
我是这样尝试的:
Flight.aggregate([
{
$match: filter
},
{
$group: {
_id: {
arrival: '$arrivalAirport'
}
}
},
{
$group: {
_id: {
year: { $year: '$departureDate' },
month: { $month: '$departureDate' }
},
cheapestFare: { $min: '$cheapestFare' }
}
},
{
$sort: {
departureDate: 1
}
}
]
显然这行不通,因为我需要每个 arrivalAirport 的所有可用月份的票价,而不是每个 arrivalAirport 的一组。
我寻找的下一个东西:子查询(我来自 SQL,所以 Mongo 对我来说相当新)。但似乎 MongoDB 不支持子查询之类的东西(所以我可以为每个 arrivalAirport 创建一个子查询)。是否有任何其他选项可以在不为每个 arrivalAirport 创建额外查询的情况下使其正常工作?
【问题讨论】:
-
对不起,当然!我要更新我的问题
标签: mongodb mongodb-query aggregation-framework