如何find与nodejs和mongoose的文件,为什么没有结果?

有3个文件亲自收集,但我找不到()

mongodbshell:

> use test; switched to db test > db.person.find(); { "_id" : ObjectId("527f18f7d0ec1e35065763e4"), "name" : "aaa", "sex" : "man", "height" : 180 } { "_id" : ObjectId("527f1903d0ec1e35065763e5"), "name" : "bbb", "sex" : "man", "height" : 160 } { "_id" : ObjectId("527f190bd0ec1e35065763e6"), "name" : "ccc", "sex" : "woman", "height" : 160 } 

我的nodejs代码:

 var mongoose = require('mongoose'); var db = mongoose.createConnection('mongodb://uuu:ppp@localhost:27017/test'); //mongoose.set('debug', true); db.on('error', console.error.bind(console, 'connection error:')); db.once('open', function callback () { console.log("connection success!"); mongoose.model('person', mongoose.Schema({ name: String}),'person'); var out = db.model('person'); //console.log(out); out.find({},function(err, obj) { console.log(obj); console.log(1); }); }); 

但是,结果是:连接成功! 1

问题是,当您使用createConnection ,您需要使用创build的连接的.model方法,而不是.model

 var db = mongoose.createConnection(...); // wrong: mongoose.model('person', mongoose.Schema({ name: String}),'person'); // right: db.model('person', mongoose.Schema({ name: String}),'person'); // perform query: db.model('person').find(...); 

原因是,据我所知,一个模型是“关联”到一个连接。 在使用mongoose.model ,模型与默认连接相关联,但是您没有使用该模型(您使用的是使用createConnection显式创build的连接)。

另一种显示方式是使用modelNames

 // wrong: mongoose.model('person', mongoose.Schema({ name: String}),'person'); console.log('default conn models:', mongoose.modelNames()); // -> [ 'person' ] console.log('custom conn models:', db.modelNames()); // -> [] // right: db.model('person', mongoose.Schema({ name: String}),'person'); console.log('default conn models:', mongoose.modelNames()); // -> [] console.log('custom conn models:', db.modelNames()); // -> [ 'person' ] 

问题是你没有把你的查找语句内部的连接callback。

试着把它放在这里:

 db.once('open', function callback () { console.log("connection success!"); mongoose.model('person', mongoose.Schema({ name: String}), 'person'); db.model('person').find({name:'aaa'},function(err, obj) { console.log(obj); }); });