Carasel Carasel - 1 year ago 704
Node.js Question

Argument passed in must be a string of 24 hex characters - I think it is

I have a method to find a document in my database based on its ObjectID:

console.log('id: ' + id + ' type: ' + typeof id);
collection.findOne({'_id':new ObjectID(id)}, function(error,doc) {
if (error) {
} else {
callback(null, doc);

When I run it I get the following error:

throw message;
Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
at new ObjectID (/myPath/node_modules/mongodb/node_modules/bson/lib/bson/objectid.js:38:11)
at /myPath/collectionDriver.js:134:41

This refers to the
line above.

The console log I have before that call outputs the id as a string of 24 hex characters:

id: "55153a8014829a865bbf700d" type: string

Before this I convert the id from an object to a string using
but it appears to work successfully as shown in my console.log.

db.myCollection.findOne({_id : ObjectId("55153a8014829a865bbf700d")})
in Robomongo brings back the expected result.

Answer Source

The id that was passed in to my function was already an object ID in this case, so did not need a new ObjectID to be created from it.

When ObjectIDs are logged out to the console they appear as hex strings, rather than ObjectID("hexString"), so I thought I needed to convert it to do the find, but it was already in the format that I needed.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download