Подтвердить что ты не робот

MongoDB запрос "WHERE _id> threshold"

Как я могу получить запрос mongo, похожий на SQL "... WHERE _id > threshold"

Я пробовал следующее, но это не дало мне результата.

 db.things.find(_id: {$gt: someid} });

Это потому, что поле _id немного отличается тем, что имеет формат?

_id : {"$oid" : "someid"} 
4b9b3361

Ответ 1

Сравните с подобными

Ключ _id в mongo не является (по умолчанию) строкой - это mongo objectId.

Вам нужно сравнить один и тот же тип, чтобы получить осмысленный результат:

oid = new ObjectId();
db.things.find(_id: {$gt: oid});

Не читать файлы mongoexport

Файлы экспорта Mongo выглядят следующим образом:

{ "_id" : { "$oid" : "4f876b00c56da1fa6a000030" }, ...

Это json-представление идентификатора объекта. Mongo не хочет, чтобы вы использовали такой синтаксис, когда на самом деле запрашивали db. Это не сработает:

# will not work
db.things.find("_id.$oid": {$gt: "string"});

id как строка

Если у вас есть идентификатор в виде строки, вы должны:

str = "123456789012345678901234";
oid = new ObjectId(str);
db.things.find(_id: {$gt: oid});

id как частичная строка

Если строка, которая у вас есть, не является допустимым значением (не 24 символа), вы получите только исключение из монго - или в зависимости от вашего драйвера, нового. Если у вас есть идентификатор частичного объекта, вы можете заполнить 0s, чтобы сделать действительную маску, и, следовательно, разрешить поиск с помощью идентификаторов частичных объектов. например:.

oid = new ObjectId(str + "0000");
db.things.find(_id: {$gt: oid});