Question

I would like to query a collection in a MongoDB database to find all records that contain a portion of an ObjectID. For a normal string I can use a regex like this:

db.teams.find({"some_string": /^51eed/})

But how would I do something similar on an ObjectID?

Specifically, I have a collection that looks something like this:

{ "status" : 0, "_id" : ObjectId("51e97ff613e737801d000002") }
{ "status" : 0, "_id" : ObjectId("51ee7513d1f7c57420000002") }
{ "status" : 0, "_id" : ObjectId("51eed9dd5b605af404000002") }
{ "status" : 0, "_id" : ObjectId("51eedab39108d8101c000002") }

I would like to query (in mongo) for all records where the ObjectId starts with "51eed". Your help is greatly appreciated.

Was it helpful?

Solution

You can simply do this with a range search, start at "51eed0000000000000000000" and end at "51eee0000000000000000000" (notice the "d" -> "e"):

db.teams.find( { 
    _id: {
        $gte: ObjectId("51eed0000000000000000000"),
        $lt:  ObjectId("51eee0000000000000000000"),
    } 
} )

OTHER TIPS

You could possibly just put that into a new ObjectId and fill the rest with 0's like:

db.teams.find({_id:{$gte:ObjectId("51eed0000000000000000000")}})

Should do the trick.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top