Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
620 views
in Technique[技术] by (71.8m points)

filter - mongoDB query "WHERE _id > threshold"

How can I have a mongo query similar to the SQL "...WHERE _id > threshold"

I tried the following, but it doesn't give me any result.

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

Is it because the _id field is a little special, in that it has the format?

_id : {"$oid" : "someid"} 
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...