MongoDB每秒获取结果

Mic*_*zuk 3 mongodb mongodb-query aggregation-framework

在MongoDB中,所有文档都有一个日期字段,它是一个时间戳。

有很多数据,对于每个间隔,我只想获取其中的一部分:

例如400ms

1402093316030<----
1402093316123
1402093316223
1402093316400<----
1402093316520
1402093316630
1402093316824<----
Run Code Online (Sandbox Code Playgroud)

是否有可能获得彼此的结果或获得第三结果?还是每400毫秒更好的第一份文件?

Nei*_*unn 5

您可以使用汇总框架和一些日期数学来做到这一点。假设您有一个“时间戳”字段和其他字段“ a”,“ b”和“ c”:

db.collection.aggregate([
    { "$group": {
        "_id": {
            "$subtract": [
                "$timestamp",
                { "$mod": [ "$timestamp", 400 ] }
            ]
        },
        "timestamp": { "$first": "$timestamp" },
        "a": { "$first": "$a" },
        "b": { "$first": "$b" },
        "c": { "$first": "$c" }
    }}
])
Run Code Online (Sandbox Code Playgroud)

因此,日期数学以400ms的间隔“分组”“时间戳”字段的值。其余数据由$first操作员识别,该操作员从字段中选择在那些分组边界上找到的“最后”值。

如果您不希望在这些边界上使用“最后一个”项目,则可以改用$last运算符。

最终结果是每400毫秒间隔出现的最后一个文档。

有关其他参考,请参见aggregate命令和Aggregation Framework运算符