我正在尝试过滤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的基本操作符来做到这一点。如何按日期过滤查找操作的结果?
答案 0 :(得分:1)
比较运算符可以正常使用日期,但ts
是Timestamp对象 - 而不是日期。
您的查询需要看起来像这样:
db['oplog.rs'].find({ts: {$gte: Timestamp(ISODate("2014-12-15T00:00:00Z").getTime(),0)}})
这将基于ISODate创建一个Timestamp对象,并在查询中使用它。