0

我收集了 6-7 百万条事件记录。我有另一个约 100,000 个每小时天气记录的集合,与事件记录跨越相同的时间范围。我正在使用带有 $lookup 的 $aggregate 管道来合并事件集合中每个事件的相关天气数据。

问题:我已经在完整的 EVENT 数据集上运行了超过8 HOURS,但没有结果。我有一个截止日期,我想知道我是否会得到结果……永远。

请帮忙

这是一个示例事件记录:

{
    "_id" : ObjectId("5dedae8111cd89b173b00910"),
    "EventType" : "P",
    "Jurisdiction" : "ABCD",
    "Year" : 2006,
    "JulianDay" : 91,
    "CallReceipt" : ISODate("2006-04-01T00:00:37Z"),
    "EventClosed" : ISODate("2006-04-01T00:05:25Z"),
    "FinalType" : "EFGHI",
    "EventWindowStart" : ISODate("2006-04-01T00:00:00Z"),
    "EventWindowEnd" : ISODate("2006-04-01T01:00:00Z")
}

这是天气记录:

{
    "_id" : ObjectId("5dc3cd909fc78c0c78a336da"),
    "DATE" : ISODate("2012-01-01T00:02:00Z"),
    "REPORT_TYPE" : "FM-16",
    "SOURCE" : 7,
    "HourlyAltimeterSetting" : "30.06",
    "HourlyDewPointTemperature" : "36",
    "HourlyDryBulbTemperature" : "37",
    "HourlyPresentWeatherType" : "BR:1 ||",
    "HourlyRelativeHumidity" : 93,
    "HourlySkyConditions" : "SCT:04 7 BKN:07 15 OVC:08 33",
    "HourlyStationPressure" : "29.46",
    "HourlyVisibility" : "5.00",
    "HourlyWetBulbTemperature" : 37,
    "HourlyWindDirection" : "260",
    "HourlyWindSpeed" : 5,
    "REM" : "MET10101/01/12 00:02:02 SPECI KROC 010502Z 26004KT 5SM BR SCT00
    7 BKN015 OVC033 03/02 A3006 RMK AO2 RTX (MP)",
    "REPORT_MODE" : "hourly"
}

这是我的代码,直接输入到 mongo shell 中:

db.EVENTS.aggregate([
{
    $lookup: 
            {
            from: "WEATHER",
            let : { start : "$EventWindowStart", end: "$EventWindowEnd"},
            pipeline : [
                { $match :
                    { $expr: 
                        { $and:
                            [
                                {$gte: ["$DATE", "$$start"]},
                                {$lte: ["$DATE", "$$end"]}
                            ]
                        }
                    }
                },
                {$project: {
                    _id : 0,
                    HourlyDryBulbTemperature : 1,
                    HourlyPrecipitation : 1,
                    HourlyVisibility : 1,
                    WindSpeed: 1
                    }
                }
             ],
             as: "HourlyWeatherData"
            }
},
{$out: "MERGED" }

])

在一个小的测试子集上,我得到了所需的输出。所以代码有效,据我所知......

样本输出:

{
    "_id" : ObjectId("5dedae8111cd89b173b00910"),
    "EventType" : "P",
    "Jurisdiction" : "ABCD",
    "Year" : 2006,
    "JulianDay" : 91,
    "CallReceipt" : ISODate("2006-04-01T00:00:37Z"),
    "EventClosed" : ISODate("2006-04-01T00:05:25Z"),
    "FinalType" : "EFGHI",
    "EventWindowStart" : ISODate("2006-04-01T00:00:00Z"),
    "EventWindowEnd" : ISODate("2006-04-01T01:00:00Z"),
    "HourlyWeatherData" : [
            {
                    "HourlyDryBulbTemperature" : "59",
                    "HourlyPrecipitation" : "0.00",
                    "HourlyVisibility" : "10.00"
            },
            {
                    "HourlyDryBulbTemperature" : "59",
                    "HourlyVisibility" : "9.94"
            }
    ]

}

PS:我在 EVENTS 的事件窗口字段上有升序索引,在 WEATHER 的 DATE 上有升序和降序索引。

4

0 回答 0