If i have a mongo document id as a string how do I query for it as an _id?

Do you mean you have the 24 hex digit string of an ObjectId?

Assuming that's what you mean, most drivers have a way to take a string and convert it to an ObjectId. In JavaScript that's:

.find({_id:new ObjectId("4f91bfcfaa7c5687a0c686d4")})

Updated to be a bit more useful for the node-native driver (from the documentation at https://github.com/christkv/node-mongodb-native):

// Get the objectID type
var ObjectID = require('mongodb').ObjectID;

var idString = '4e4e1638c85e808431000003';
collection.findOne({_id: new ObjectID(idString)}, console.log)  // ok
collection.findOne({_id: idString}, console.log)  // wrong! callback gets undefined

If your _id values are strings, you may query them just like any other field. (Just remember, if you are setting custom values for _id, they must be kept unique, or you will get a duplicate key error. )

Here is an example in the Mongo JS Shell:

> db.test.insert({_id:"stringID1"})
> db.test.insert({_id:"stringID2"})
> db.test.insert({_id:"stringID3"})
> db.test.find({_id:"stringID1"})
{ "_id" : "stringID1" }
> 

Is this what you were looking for? I hope I did not misunderstand your question!


Mongoose auto casts the string _id to ObjectId when you use findByID, so you can query using the string _id.

Also remember that any input coming into your API from req.body or req.params will all be type string so you will need to type cast if needed..., but as mentioned, mongoose does that for you so you can just leave _id in the string format it comes in as.