No se puede consultar mongoDB con mongoose en node.js

Supongamos que tengo una colección en mi mongoDB: db.co y solo tengo un documento:

 { "_id" : ObjectId("50d083e32cdcf7ce065b616c"), "age" : 22, "friends" : [ "Tom"], "location" : "NY", "name" : "lee", "skill" : [ "javascript", "java" ] } 

Luego quiero consultarlo en node.js con mongoose través de este código:

 var coSchema = mongoose.Schema( { age: Number, friends: Array, location: String, name: String, skill: Array }) var Co = mongoose.model('Co', coSchema); function findSomeoneInCo (name) { Co.find({"name": name}, function (err, doc) { if (err) { console.log('find some one failed: ' + err); return; } console.log('find successed: ' + doc); }) } findSomeoneInCo("lee"); 

Pero no me devuelve nada.

¿Qué problema hay con mi código? ¿Cómo puedo obtener el resultado de la consulta correcta?

Mongoose pluraliza el nombre del modelo de caja inferior al determinar el nombre de la colección a usar. Así que con un nombre de modelo de 'Co' se buscará en la colección de cos de forma predeterminada.

Para anular el valor predeterminado y alinearlo con su co colección existente:

 var Co = mongoose.model('Co', coSchema, 'co'); 

Mongoose pluraliza el nombre de su modelo durante cualquier operación CURD, use esto y verifique:

 var Co = mongoose.model('Co', coSchema, 'co'); //Even the case matters 

o

 var coSchema = new Schema({ age: Number, friends: Array, location: String, name: String, skill: Array }, {collection:'co'}); var Co = mongoose.model('Co',coSchema); 

.find () funciona de forma asíncrona, lo que significa que su callback se ejecuta cuando su función ya tiene.

Ver scope variable en función asíncrona.

 //try passing a callback function to your search function, like: function findSomeoneInCo (name, callback) { //happens now - here you could still return something Co.find({"name": name}, function (err, doc) { //happens later - too late to return stuff, function has ran already if (err) { callback(err); return; } callback(doc); }) } //call your function passing a callback function findSomeoneInCo("lee", function(doc){ console.log('do something with your results: ' + doc); }); 

Noté que su callback a find () tiene los siguientes parámetros: err, doc

find () siempre devuelve una matriz, por lo que realmente desea que esto sea: err, docs

O use findOne ()

Las cosas asíncronas no deberían ser un problema en el código que has publicado, las devoluciones de llamadas anidadas aún se ejecutarán. ¿Estás seguro de que tu conexión está bien? Me gustaría ejecutar una consulta abierta:

 Co.find({}, function(err, docs){ console.log(docs); } 

Sólo para comprobar que la colección tiene algo dentro.