NodeJS + MongoDB: Getting data from collection with findOne ()


I have a collection "companies" with several objects. Every object has "_id" parameter. I'm trying to get this parameter from db:

    collection.findOne({_id:},function(err, doc) {
        if (doc){
        } else {
            console.log('no data for this company');

So, I request companies/4fcfd7f246e1464d05000001 (4fcfd7f246e1464d05000001 is _id-parma of a object I need) and findOne returns nothing, that' why console.log('no data for this company'); executes.

I'm absolutely sure that I have an object with _id="4fcfd7f246e1464d05000001". What I'm doing wrong? Thanks!

However, I've just noticed that id is not a typical string field. That's what mViewer shows:

"_id": {
        "$oid": "4fcfd7f246e1464d05000001"

Seems to be strange a bit...

6/7/2012 9:56:06 AM

Accepted Answer

You need to construct the ObjectID and not pass it in as a string. Something like this should work:

var BSON = require('mongodb').BSONPure;
var obj_id = BSON.ObjectID.createFromHexString("4fcfd7f246e1464d05000001");

Then, try using that in your find/findOne.

Edit: As pointed out by Ohad in the comments (thanks Ohad!), you can also use:

new require('mongodb').ObjectID(

Instead of createFromHexString as outlined above.

5/23/2017 11:46:55 AM

That's because _id field in mongo isn't of string type (as your As suggested in other answers, you should explicitly convert it.

Try mongoskin, you could use it like node-mongodb-native driver, but with some sugar. For example:

// connect easier
var db = require('mongoskin').mongo.db('localhost:27017/testdb?auto_reconnect');

// collections
var companies = db.collection('companies');

// create object IDs
var oid =;

// some nice functions…

//… and bindings
db.bind('companies', {
  top10: function(callback) {
    this.find({}, {limit: 10, sort: [['rating', -1]]).toArray(callback);


Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow