mongoDB query “WHERE _id > threshold”

Compare like with like

The _id key in mongo is not (by default) a string – it is a mongo objectId.

You need to compare to the same type to get a meaningful result:

var ObjectId = require('mongodb').ObjectID;
var oid = new ObjectId();
db.things.find(_id: {$gt: oid});

Don’t read mongoexport files

Mongo export files look like this:

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

This is a json representation of an object id. Mongo doesn’t want you to use that kind of syntax when actually querying the db. This will not work:

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

id as a string

If you have the id as a string, you’d do:

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

id as a partial string

If the string you have is not a valid oid (not 24 chars long), you’ll just get an exception from mongo – or depending on your driver, a new oid. If you have a partial object id you can pad with 0s to make a valid oid and therefore permit finding by partial object ids. e.g.:

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

Leave a Comment