过滤&在MongoDB的oplog中按日期排序

时间:2014-12-16 12:48:27

标签: mongodb

我正在尝试过滤oplog.rs以查看在特定日期之后记录的操作。但是比较运算符似乎不适用于MongoDB中的日期:

db['oplog.rs'].find({ts: {$gte: ISODate("2014-12-15T00:00:00Z")}})

令人困惑的是,许多在线消息人士都说这样做,但显然无法正常工作。我希望返回ts字段至少在12月15日或更近的结果,但我得到的结果显然是在此期间之前。如果我用$ lte切换$ gte,则不会显示任何结果,即使在此指定日期之前和之后肯定有条目。

另外,我似乎无法对结果进行排序。如果我试试这个:

db['oplog.rs'].find().sort({ts: -1})

我明白了:

error: {
    "$err" : "Runner error: Overflow sort stage buffered data usage of 33566005 bytes exceeds internal limit of 33554432 bytes",
    "code" : 17144
}

如果我可以过滤结果以使它们更新,我希望它能克服这种排序错误,但我甚至不能用MongoDB的基本操作符来做到这一点。如何按日期过滤查找操作的结果?

1 个答案:

答案 0 :(得分:1)

比较运算符可以正常使用日期,但tsTimestamp对象 - 而不是日期。

您的查询需要看起来像这样:

db['oplog.rs'].find({ts: {$gte: Timestamp(ISODate("2014-12-15T00:00:00Z").getTime(),0)}})

这将基于ISODate创建一个Timestamp对象,并在查询中使用它。