mongodb - MongoDB 以特定时间间隔获取数据
问题描述
我在 MongoDb 中有以下格式的数据:
/* 1 */
{
"_id" : ObjectId("5a40f49743bf8220c865cbaf"),
"TIMESTAMP" : ISODate("2017-01-08T11:14:11.000Z"),
"WIZ_VAR_10" : 710.0,
"WIZ_VAR_11" : 910.0,
"WIZ_VAR_12" : 910.0,
"TIMESTAMP_EP" : 1483854251.0
}
/* 2 */
{
"_id" : ObjectId("5a40f49743bf8220c865cbb0"),
"TIMESTAMP" : ISODate("2017-01-08T11:14:12.000Z"),
"WIZ_VAR_10" : 720.0,
"WIZ_VAR_11" : 920.0,
"WIZ_VAR_12" : 920.0,
"TIMESTAMP_EP" : 1483854252.0
}
/* 3 */
{
"_id" : ObjectId("5a40f49743bf8220c865cbb1"),
"TIMESTAMP" : ISODate("2017-01-08T11:14:13.000Z"),
"WIZ_VAR_10" : 730.0,
"WIZ_VAR_11" : 930.0,
"WIZ_VAR_12" : 930.0,
"TIMESTAMP_EP" : 1483854253.0
}
/* 4 */
{
"_id" : ObjectId("5a40f49743bf8220c865cbb2"),
"TIMESTAMP" : ISODate("2017-01-08T11:14:14.000Z"),
"WIZ_VAR_10" : 740.0,
"WIZ_VAR_11" : 940.0,
"WIZ_VAR_12" : 940.0,
"TIMESTAMP_EP" : 1483854254.0
}
/* 5 */
{
"_id" : ObjectId("5a40f49743bf8220c865cbb3"),
"TIMESTAMP" : ISODate("2017-01-08T11:14:15.000Z"),
"WIZ_VAR_10" : 750.0,
"WIZ_VAR_11" : 950.0,
"WIZ_VAR_12" : 950.0,
"TIMESTAMP_EP" : 1483854255.0
}
/* 6 */
{
"_id" : ObjectId("5a40f49743bf8220c865cbb4"),
"TIMESTAMP" : ISODate("2017-01-08T11:14:16.000Z"),
"WIZ_VAR_10" : 760.0,
"WIZ_VAR_11" : 960.0,
"WIZ_VAR_12" : 960.0,
"TIMESTAMP_EP" : 1483854256.0
}
/* 7 */
{
"_id" : ObjectId("5a40f49743bf8220c865cbb5"),
"TIMESTAMP" : ISODate("2017-01-08T11:14:17.000Z"),
"WIZ_VAR_10" : 770.0,
"WIZ_VAR_11" : 970.0,
"WIZ_VAR_12" : 970.0,
"TIMESTAMP_EP" : 1483854257.0
}
/* 8 */
{
"_id" : ObjectId("5a40f49743bf8220c865cbb6"),
"TIMESTAMP" : ISODate("2017-01-08T11:14:18.000Z"),
"WIZ_VAR_10" : 780.0,
"WIZ_VAR_11" : 980.0,
"WIZ_VAR_12" : 980.0,
"TIMESTAMP_EP" : 1483854258.0
}
/* 9 */
{
"_id" : ObjectId("5a40f49743bf8220c865cbb7"),
"TIMESTAMP" : ISODate("2017-01-08T11:14:19.000Z"),
"WIZ_VAR_10" : 790.0,
"WIZ_VAR_11" : 990.0,
"WIZ_VAR_12" : 990.0,
"TIMESTAMP_EP" : 1483854259.0
}
/* 10 */
{
"_id" : ObjectId("5a40f49743bf8220c865cbb8"),
"TIMESTAMP" : ISODate("2017-01-08T11:14:20.000Z"),
"WIZ_VAR_10" : 800.0,
"WIZ_VAR_11" : 0.0,
"WIZ_VAR_12" : 0.0,
"TIMESTAMP_EP" : 1483854260.0
}
/* 11 */
{
"_id" : ObjectId("5a40f49743bf8220c865cbb9"),
"TIMESTAMP" : ISODate("2017-01-08T11:14:21.000Z"),
"WIZ_VAR_10" : 810.0,
"WIZ_VAR_11" : 10.0,
"WIZ_VAR_12" : 10.0,
"TIMESTAMP_EP" : 1483854261.0
}
/* 12 */
{
"_id" : ObjectId("5a40f49743bf8220c865cbba"),
"TIMESTAMP" : ISODate("2017-01-08T11:14:22.000Z"),
"WIZ_VAR_10" : 820.0,
"WIZ_VAR_11" : 20.0,
"WIZ_VAR_12" : 20.0,
"TIMESTAMP_EP" : 1483854262.0
}
我想要实现的是每隔 5 秒获取一次记录。所以我期望的输出应该是
/* 1 */
{
"_id" : ObjectId("5a40f49743bf8220c865cbaf"),
"TIMESTAMP" : ISODate("2017-01-08T11:14:11.000Z"),
"WIZ_VAR_10" : 710.0,
"WIZ_VAR_11" : 910.0,
"WIZ_VAR_12" : 910.0,
"TIMESTAMP_EP" : 1483854251.0
}
/* 6 */
{
"_id" : ObjectId("5a40f49743bf8220c865cbb4"),
"TIMESTAMP" : ISODate("2017-01-08T11:14:16.000Z"),
"WIZ_VAR_10" : 760.0,
"WIZ_VAR_11" : 960.0,
"WIZ_VAR_12" : 960.0,
"TIMESTAMP_EP" : 1483854256.0
}
/* 11 */
{
"_id" : ObjectId("5a40f49743bf8220c865cbb9"),
"TIMESTAMP" : ISODate("2017-01-08T11:14:21.000Z"),
"WIZ_VAR_10" : 810.0,
"WIZ_VAR_11" : 10.0,
"WIZ_VAR_12" : 10.0,
"TIMESTAMP_EP" : 1483854261.0
}
所以本质上我想每隔一段时间获取记录。我检查了聚合框架,但找不到相同的确切解决方案。非常感谢任何帮助。
解决方案
您可以使用$second运算符,它从日期中获取秒数(0-60)
,然后使用$mod取模5
(5
秒间隔)。在你的情况下,你想开始,11
所以你应该检查模是否是$eq to 1
。要直接使用这些运算符,$match
您需要$expr,它在 MongoDB v 3.6 中可用:
db.col.aggregate([
{
$match: {
$expr: {
$eq: [ { $mod: [ { $second: "$TIMESTAMP" }, 5 ] }, 1 ]
}
}
}
])
如果您使用的是较低的 MongoDB 版本,那么您可以尝试使用$redact:
db.col.aggregate([
{
$redact: {
$cond: {
if: { $eq: [ { $mod: [ { $second: "$TIMESTAMP" }, 5 ] }, 1 ] },
then: "$$KEEP",
else: "$$PRUNE"
}
}
}
])
推荐阅读
- python - TypeError:预期的 str、bytes 或 os.PathLike 对象,未设置 - 错误 Scrapy
- z3 - 如何使用多核运行 Z3?
- html - 使用找不到 mp3 文件的来源
- sql - vb.net sql 检查表中是否存在值并将结果转换为变量
- angularjs - 当 BundleTable.EnableOptimizations = true 时,AngularJS angular-ui-router.min.js 会破坏应用程序
- python-3.x - moveCursor(start, end) 引发异常 ''QTextCursor' 没有属性 keepAnchor"
- javascript - Javascript过滤嵌套数组
- python - 按目标列值将 CSV 文件拆分为多个 csv
- node.js - 在 Flutter 中使用 npm 包
- android - 非空视图可以在侦听器中对其上下文有空引用吗?