2

我正在尝试使用 java 查询 mongo oplog 集合的时间戳字段。

下面是代码。

BSONTimestamp timestamp1 = new BSONTimestamp(1499172935, 1);

BasicDBObject query1 = new BasicDBObject("ts", new BasicDBObject("$gt", timestamp1) );

DBCursor cursor = dbCollection.find(query1);

当我在上面运行一段代码时,它什么也不返回。

下面是转换后的查询。

{ "ts" : { "$gt" : { "$ts" : 1499172935 , "$inc" : 1}} }

我使用 robomongo 执行了相同的查询,它也没有返回任何内容。

db.getCollection('oplog.rs').find({ "ts" : { "$gt" : { "$ts" : 1499172935 , "$inc" : 1}} })

但是当我将查询更改为使用 Timestamp 并执行它时,它会返回 oplog 记录列表。下面是工作中的 mongo 查询。

db.getCollection('oplog.rs').find({ "ts" : { "$gt" : Timestamp(1499172935 , 1)} })

如何使用 java 获取上述查询?或者有没有其他方法可以使用java查询oplog时间戳字段?

4

1 回答 1

1

您可以使用“BsonTimeStamp”类型来构建您的过滤器。

BsonTimestamp lastReadTimestamp = new BsonTimestamp(time, inc);

Bson filter = new Document("$gt", lastReadTimestamp);

dbCollection.find(new Document("ts", filter));

于 2017-08-08T20:59:17.637 回答