Сравните два mon go ObjectId, чтобы проверить, какой из двух объектов был создан позже - PullRequest
0 голосов
/ 09 января 2020

Я знаю, что mon go ObjectId имеет метку времени и случайный инкремент. Таким образом, должна быть возможность сравнить два ObjectIds, чтобы выяснить, какой из этих двух объектов был создан ранее или позже.

Как я могу это сделать, не написав все с нуля?

1 Ответ

0 голосов
/ 09 января 2020

Рассмотрим коллекцию t1 с двумя документами:

{ "_id" : ObjectId("5e1705d9bc058dac23306dd0") },
{ "_id" : ObjectId("5e1705ddbc058dac23306dd2") }

Запросы сравнения с использованием метода find и запрос агрегации с использованием ObjectId для сравнения:

var INPUT_OBJ = ObjectId("5e1705dcbc058dac23306dd1")

db.t1.aggregate( [
  { $match: { $expr: { $gt: [ { $toDate: "$_id" },  { $toDate: INPUT_OBJ } ] } } }
] )

db.t1.find( { $expr: { $gt: [ { $toDate: "$_id" },  { $toDate: INPUT_OBJ } ] } } )

Оба запроса возвращают документ: { "_id" : ObjectId("5e1705ddbc058dac23306dd2") }

Для проверки можно использовать метод getTimestamp(), чтобы получить дату / время из ObjectId. Например, ObjectId("5e1705d9bc058dac23306dd0").getTimestamp() возвращает ISODate("2020-01-09T10:52:09Z").

...