Reputation: 21150
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
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
Reputation: 588
You can also destructure your ObjectId and MongoClient to optimize your code and make it more readable.
const { MongoClient, ObjectId } = require('mongodb');
Upvotes: 2
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
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
Reputation: 4225
You need to require the ObjectId function before using it:
var ObjectId = require('mongodb').ObjectID;
Upvotes: 124