Запрос поля метки времени mongo oplog с использованием java

Я пытаюсь запросить поле временной метки коллекции mongo oplog, используя java.

Ниже приведен код.

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}} })

Но когда я изменил запрос на использование метки времени и выполнил его, он возвращает список записей oplog. Ниже приведен рабочий запрос монго.

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

Как я могу получить вышеуказанный запрос с помощью java? или есть ли другой способ запросить поле метки времени oplog с помощью java?


person Bhavesh Kaushal    schedule 04.07.2017    source источник


Ответы (1)


Вы можете использовать тип «BsonTimeStamp» для создания своего фильтра.

BsonTimestamp lastReadTimestamp = новый BsonTimestamp (время, вкл.);

Фильтр Bson = новый документ («$ gt», lastReadTimestamp);

dbCollection.find (новый документ («ts», фильтр));

person samo    schedule 08.08.2017