I am doing MongoDB lookups by converting a string to BSON. Is there a way for me to determine if the string I have is a valid ObjectID for Mongo before doing the conversion?
In the solution answer Andy Macleod said:
What has been working for me is casting a string to an objectId and then checking that the original string matches the string value of the objectId.
new ObjectId('timtamtomted'); //616273656e6365576f726b73 new ObjectId('537eed02ed345b2e039652d2') //537eed02ed345b2e039652d2
This work because valid ids do not change when casted to an ObjectId but a string that gets a false valid will change when casted to an objectId.
An implementation of this approach, would be a function that checks if the passed value is a valid ObjectId
and works with both string
and ObjectId
(object) values. It would look something like this:
var ObjectId = require("mongoose");.Types.ObjectId;
function isValidObjectId(value) {
// If value is an object (ObjectId) cast it to a string
var valueString = typeof value === "string" ? value : String(value);
// Cast the string to ObjectId
var idInstance = new ObjectId(valueString);
return String(idInstance) === valueString;
}