Estoy tratando de verificar si existe un registro en MongoDB usando mangosta. Para eso estoy usando la función findOne(). Pero incluso si el registro/documento no existe, la consulta devuelve un valor no nulo. ¿Cómo usar esta función o cualquier otra forma de verificar si existe un documento? mi código es:
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(); }Esto se debe a que mongoose 's findOne devuelve un "documento Mongoose", que es esencialmente un envoltorio glorificado. esto significa que si es un valor null , seguirá teniendo las propiedades del "documento mangosta".
Desea utilizar la opción lean para evitar esto:
const doc = user.findOne({username:req_username}).lean(); Ahora, si el usuario no existe, el doc tendrá un valor null como se esperaba.
Prueba esto:
const connectToDatabase = () => { mongoose.connect("mongodb://localhost/my_database", { useNewUrlParser: true }); } var req_username = ""; var req_password = ""; user.findOne({ username: req_username }) .then(async (user) => { if (user) { console.log("user already there"); } else { var newUserDoc = new user(); newUserDoc.username = req_username; newUserDoc.password = req_password; await newUserDoc.save(); } })