2012-03-12 23 views
22

Sto memorizzando alcuni dati in un mongodb e accedendo con js/nodejs e mangusta. Posso usare .find() per trovare qualcosa nel database bene, non è un problema. Qual è il problema se non c'è qualcosa, mi piacerebbe fare qualcos'altro. Attualmente questo è quello che sto cercando:Fai qualcosa se non trovi nulla con .find() mangusta

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); 
    } 
    }); 
}); 

Nessuno di questi incendi quando faccio qualcosa in cui act.params non sarebbero nell'indice nick. Non capisco niente da consolare quando succede, ma ottengo che user.nick effettui correttamente il login quando è effettivamente lì. Ho solo cercato di farlo in senso inverso in questo modo:

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'); 
    } 
    }); 
}); 

ma questo ancora non registrava nope. Cosa mi manca qui?

Se non lo trova, salta semplicemente tutto nella chiamata di ricerca, che va bene, tranne che ho bisogno di fare le cose in seguito se non è lì che non voglio fare se lo è. :/

risposta

63

Quando non ci sono corrispondenze find() restituisce [], mentre findOne() restituisce null. Quindi, o l'uso:

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

o:

Model.findOne({...}, function (err, result) { 
    if (err) { ... } 
    if (!result) { 
     // do stuff here 
    } 
} 
+5

Questa è la risposta per spiegare la differenza tra ciò che viene restituito tra 'find()' e 'findOne()' e fornisce le risposte! – Rob

8
UserModel.find({ nick: act.params }, function (err, users) { 
    if (err) { console.log(err) }; 
    if (!users.length) { //do stuff here }; 
    else { 
    users.forEach(function (user) { 
     console.log(user.nick); 
    }); 
    } 
}); 

è quello che ho trovato a lavorare.

+0

questo non ha funzionato per me, solo il caso (users.length!) –

+1

cose deve aver cambiato dal 2012. cercherò questo Uscire stasera quando torno a casa, e se questo non funziona e user.length fa, modificheremo la risposta per includerla. – Rob

5

ho dovuto usare:

if(!users.length) { //etc } 

per farlo funzionare.

Problemi correlati