无法在node.js中用mongoose查询mongoDB

假设我在我的mongoDB中有一个集合: db.co并且只有一个文档:

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

然后我想通过这个代码在node.js中用mongoose来查询它:

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

但它没有任何回报

我的代码有什么问题? 我怎样才能得到corrent查询结果?

当确定要使用的集合名称时,Mongoose会将较小型的模型名称复数化。 因此,使用'Co'的模型名称默认情况下将会查看cos集合。

要覆盖默认值并与您现有的co集合alignment:

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

在任何CURD操作过程中,Mongoose都会复制你的模型名称,使用这个&检查:

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

要么

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

.find()工作asynchronous,这意味着它的callback运行时,你的function已经。

请参阅asynchronousfunction中的variables范围

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

我注意到你的callbackfind()有以下参数:err,doc

find()总是返回一个数组,所以你真的希望这是:err,docs

或者使用findOne()

asynchronous的东西不应该是你发布的代码中的问题,嵌套的callback将仍然执行。 你确定你的连接是好的吗? 我会运行一个开放的查询:

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

只是为了检查集合有一些东西在里面