JVG
JVG

Reputation: 21150

Correct way to search for MongoDB entries by '_id' in Node

I'm using MongoDb (as part of MongoJS) in Node. Here is the documentation for MongoJS.

I'm trying to do a call within Node based on an entry's _id field. When using vanilla MongoDB from the console, I can do:

db.products.find({"_id":ObjectId("51d151c6b918a71d170000c7")})

and it correctly returns my entry. However, when I do the same thing in Node, like:

db.products.find({"_id": ObjectId("51d151c6b918a71d170000c7")}, function (err, record) {
    // Do stuff
});

I get ReferenceError: ObjectId is not defined.

What is the correct protocol for doing this?

Upvotes: 47

Views: 38420

Answers (5)

Nick Taras
Nick Taras

Reputation: 746

Here's another way to utilise objectId when using mongoose.

// at the top of the file
const Mongoose = require('mongoose')
const ObjectId = Mongoose.Types.ObjectId;

// when using mongo to collect data
Mongoose.model('users', userSchema).findOne({ _id: 
    ObjectId('xyz') }, function (err, user) {
        console.log(user)
        return handle(req, res)
    })
})

Upvotes: 1

You can also destructure your ObjectId and MongoClient to optimize your code and make it more readable.

const { MongoClient, ObjectId } = require('mongodb');

Upvotes: 2

ofir_aghai
ofir_aghai

Reputation: 3311

if you are using mongoose you can try this:

var mongoose = require('mongoose')
usersSchema = mongoose.model('users'),
mongoose.Types.ObjectId("<object_id>")

usersSchema.find({"_id": mongoose.Types.ObjectId("<object_id>")}, function (err, record) {
// Do stuff
});

Upvotes: 2

Amol
Amol

Reputation: 21

If you are using MongoJS, you can do:

var ObjectId = mongojs.ObjectId;

Then,

db.users.find({"_id": ObjectId(id)}, function(err, user){...}

Upvotes: 2

Chris
Chris

Reputation: 4225

You need to require the ObjectId function before using it:

var ObjectId = require('mongodb').ObjectID;

Upvotes: 124

Related Questions