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?
You need to require the ObjectId function before using it:
var ObjectId = require('mongodb').ObjectID;
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
});
If you are using MongoJS, you can do:
var ObjectId = mongojs.ObjectId;
Then,
db.users.find({"_id": ObjectId(id)}, function(err, user){...}
You can also destructure your ObjectId and MongoClient to optimize your code and make it more readable.
const { MongoClient, ObjectId } = require('mongodb');