Mic*_*zuk 3 mongodb mongodb-query aggregation-framework
在MongoDB中,所有文档都有一个日期字段,它是一个时间戳。
有很多数据,对于每个间隔,我只想获取其中的一部分:
例如400ms
1402093316030<----
1402093316123
1402093316223
1402093316400<----
1402093316520
1402093316630
1402093316824<----
Run Code Online (Sandbox Code Playgroud)
是否有可能获得彼此的结果或获得第三结果?还是每400毫秒更好的第一份文件?
您可以使用汇总框架和一些日期数学来做到这一点。假设您有一个“时间戳”字段和其他字段“ 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运算符。