Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Do something if nothing found with .find() mongoose

I'm storing some data in a mongodb and accessing it with js/nodejs and mongoose. I can use .find() to find something in the database just fine, that isn't an issue. What is a problem is if there isn't something, I'd like to do something else. Currently this is what I'm trying:

UserModel.find({ nick: act.params }, function (err, users) {   if (err) { console.log(err) };   users.forEach(function (user) {     if (user.nick === null) {       console.log('null');     } else if (user.nick === undefined) {       console.log('undefined');     } else if (user.nick === '') {       console.log('empty');     } else {       console.log(user.nick);     }   }); }); 

None of those fire when I do something where act.params wouldn't be in the nick index. I don't get anything to console at all when this happens, but I do get user.nick to log just fine when it's actually there. I just tried to do it in reverse like this:

UserModel.find({ nick: act.params }, function (err, users) {   if (err) { console.log('noooope') };   users.forEach(function (user) {     if (user.nick !== '') {       console.log('null');     } else {       console.log('nope');     }   }); }); 

but this still didn't log nope. What am I missing here?

If it doesn't find it, it just skips everything in the find call, which is fine, except I need to do things afterwards if it isn't there that I don't want to do if it is. :/

like image 650
Rob Avatar asked Mar 12 '12 01:03

Rob


People also ask

What does find function return in mongoose?

find() function returns an instance of Mongoose's Query class. The Query class represents a raw CRUD operation that you may send to MongoDB. It provides a chainable interface for building up more sophisticated queries. You don't instantiate a Query directly, Customer.

Is Mongoose find a promise?

Mongoose queries are not promises. However, they do have a . then() function for yield and async/await.

What is $in in mongoose?

The value of the $in operator is an array that contains few values. The document will be matched where the value of the breed field matches any one of the values inside the array.

What is Mongoose function?

Mongoose is an Object Data Modeling (ODM) library for MongoDB and Node. js. It manages relationships between data, provides schema validation, and is used to translate between objects in code and the representation of those objects in MongoDB.


1 Answers

When there are no matches find() returns [], while findOne() returns null. So either use:

Model.find( {...}, function (err, results) {     if (err) { ... }     if (!results.length) {         // do stuff here     } } 

or:

Model.findOne( {...}, function (err, result) {     if (err) { ... }     if (!result) {         // do stuff here     } } 
like image 141
weiyin Avatar answered Sep 19 '22 17:09

weiyin