I am trying to check if a record exists in MongoDB using mongoose. For that I am using the function findOne(). But even if the record/document does not exists the query returns a non null value. How to use this function or any other way to check if a document exists?
My code is:
var req_username = "";
var req_password = "";
const insertUserIntoDatabase = (requestBody) => {
req_username = requestBody.username;
req_password = requestBody.password;
connectToDatabase();
if (doesUserExistAlready()==true) {
console.log("user already there");
}else{
insertUser();
}
}
const connectToDatabase = () => {
mongoose.connect("mongodb://localhost/my_database",
{useNewUrlParser:true});
}
const doesUserExistAlready = () => {
const doc = user.findOne({username:req_username});
if (doc == null) {
return false;
}else{
return true;
}
}
const insertUser = () => {
var newUserDoc = new user();
newUserDoc.username = req_username;
newUserDoc.password = req_password;
newUserDoc.save();
}
3
Answers
Try this:
This is because
mongoose
‘sfindOne
returns a "Mongoose document", which is essentially a glorified wrapper. this means if it’s anull
value it will still have the "mongoose document" properties.You want to be using the lean option to bypass this:
Now if the user does not exist
doc
will have anull
value as expected.Mongoose has a Model.exists() method which returns true if the record exists, or false otherwise. For instance:
Then in your controllers, import the User from your model like so
Read more here: https://mongoosejs.com/docs/api.html#model_Model-exists