MongoDB以特定的时间间隔获取数据

MongoDB以特定的时间间隔获取数据,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我在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 } /

我在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
}
所以基本上我想每隔一段时间获取记录。我检查了聚合框架,但找不到该框架的确切解决方案。 非常感谢您的帮助。

您可以使用运算符,从日期
(0-60)
开始取秒部分,然后取模
5
5
秒间隔)。在您的例子中,您希望从
11
开始,因此您应该检查模是否为
1
。要在
$match
中直接使用这些运算符,您需要MongoDB V3.6中提供的运算符:

db.col.aggregate([
    {
        $match: {
            $expr: {
                $eq: [ { $mod: [ { $second: "$TIMESTAMP" }, 5 ] }, 1 ]
            }            
        }
    }
])
如果您使用的是较低版本的MongoDB,则可以尝试:


非常感谢,它成功了。我只有一个查询,我的数据可能以奇数或偶数间隔开始,就像我的例子中的14:11,也可能在14:10开始。我怎么能在同一个查询中做到这一点呢?我建议这里有两个简单的查询:1。获取第一个日期以确定偶数或奇数2。应用聚合,我想知道如何扩展分钟/小时/天/周间隔的逻辑,这意味着我希望在分钟/小时/天/周边界处查看数据。因为$minute给出了从日期到时间的分钟数,介于0-59之间,我希望以5分钟的间隔查看数据。例如,对于分钟数,您必须检查秒数部分是否等于零,并对分钟数部分执行$mod,等等。。。
db.col.aggregate([
    {
        $redact: {
            $cond: {
                if: { $eq: [ { $mod: [ { $second: "$TIMESTAMP" }, 5 ] }, 1 ] },
                then: "$$KEEP",
                else: "$$PRUNE"
            }            
        }
    }
])