2012-03-12 33 views
22

Estoy almacenando algunos datos en un mongodb y accediendo a él con js/nodejs y mangosta. Puedo usar .find() para encontrar algo en la base de datos, eso no es un problema. Lo que es un problema es que si no hay algo, me gustaría hacer otra cosa. Actualmente esto es lo que trato:Haga algo si no se encuentra nada con .find() mangosta

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

Ninguno de los incendios cuando hago algo donde act.params no estarían en el índice de nick. No recibo nada para consolar cuando esto sucede, pero obtengo user.nick para iniciar sesión correctamente cuando está realmente allí. Sólo traté de hacerlo a la inversa de esta manera:

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

pero esto todavía no se registró nope. ¿Que me estoy perdiendo aqui?

Si no lo encuentra, se saltea todo en la llamada de búsqueda, lo cual está bien, excepto que necesito hacer cosas después si no está allí que no quiero hacer si es así. :/

Respuesta

63

Cuando no hay coincidencias encontrar() devuelve [], mientras findOne() devuelve null. Así que, o 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

¡Hice esto la respuesta para explicar la diferencia en lo que se devuelve entre 'find()' y 'findOne()' y suministrando las respuestas! – 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); 
    }); 
    } 
}); 

es lo que encontré para trabajar.

+0

esto no funcionó para mí, si sólo el (users.length!) –

+1

cosas debe haber cambiado desde 2012. voy a tratar este esta noche cuando llegue a casa, y si esto no funciona y lo hace users.length, editaré la respuesta para incluirla. – Rob

5

tuve que usar:

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

para conseguir que funcione.

Cuestiones relacionadas