Mongoose返回empy对象,在mongo shell中工作

我试图从我的mongoDB使用mongoose(最新版本)返回一个JSON对象。 一切工作发现,但我得到一个空数组返回[]。

app.js

/*/////////////////////////////////////////////////////////////////////////////////////////////////////////// dependencies ///////////////////////////////////////////////////////////////////////////////////////////////////////////*/ var express = require("express") var cons = require("consolidate") var app = express() var db = require("./model/db") var path = require("path") var routes = require("./routes/routes") /*/////////////////////////////////////////////////////////////////////////////////////////////////////////// configure ///////////////////////////////////////////////////////////////////////////////////////////////////////////*/ app.configure(function(){ app.use(app.router) app.engine("html", cons.hogan) app.set("view engine", "html") app.set("views", __dirname + "/views") app.use(express.static(path.join(__dirname, "public"))) app.use(express.errorHandler()) }) /*/////////////////////////////////////////////////////////////////////////////////////////////////////////// routes ///////////////////////////////////////////////////////////////////////////////////////////////////////////*/ app.get("/", routes.index) app.get("/hire", routes.hire) app.get("/hire/:id/:nr", routes.hirePerson) app.get("/books", routes.books) app.get("/projects", routes.projects) /*/////////////////////////////////////////////////////////////////////////////////////////////////////////// listen ///////////////////////////////////////////////////////////////////////////////////////////////////////////*/ app.listen(2020) 

db.js

 var mongoose = require('mongoose'); var teamSchema = new mongoose.Schema({ country: String, GroupName: String }); mongoose.model('Team', teamSchema); mongoose.connect('mongodb://localhost/basingCOM'); var Team = mongoose.model('Team'); Team.find({"GroupName":"kevin"}, function (err, teams) {console.log(teams)}) 

这个.find方法在shell中工作 ,我得到的json对象返回,但是当我在我的节点应用程序中使用它,控制台吐出一个空的对象。

 20 Feb 11:47:06 - [nodemon] restarting due to changes... 20 Feb 11:47:06 - [nodemon] starting `node app.js` [] 

thx所有你的帮助人的,真的很感激它。 我到达那里缓慢但肯定thx 🙂


编辑1

我改变了db.js(使用下面的注释),但我仍然有一个空的对象。

 var mongoose = require('mongoose'); var teamSchema = new mongoose.Schema({ country: String, GroupName: String }); var teamModel = mongoose.model('Team', teamSchema); mongoose.connect('mongodb://localhost/basingCOM', function(err){doDBstuff(err)}); function doDBstuff(err){ if (err){throw err} console.log("jow") teamModel.find({"GroupName":"kevin"}, function (err, teams) {console.log(teams)}); } 

编辑2

我创build了一个新的模式(booksSchema),并用booksModel代替了teamModel。 输出是一个正确的JSON对象。 所以它可以和booksModel一起使用,但不能和teamModel一起使用。

 var mongoose = require('mongoose'); mongoose.set('debug', true) var teamSchema = new mongoose.Schema({ country: String, GroupName: String }); var booksSchema = new mongoose.Schema({ title: String, author: String }); var teamModel = mongoose.model('Team', teamSchema); var booksModel = mongoose.model('books', booksSchema); mongoose.connect('mongodb://localhost/basingCOM', function(err){doDBstuff(err)}); function doDBstuff(err){ if (err){throw err} booksModel.find(function (err, books) {console.log(books)}); } 

一些控制台输出:

 > db.Team.find() { "_id" : ObjectId("5305d71aa753d02674ed311c"), "country" : "belgium", "GroupName" : "kevin" } { "_id" : ObjectId("5305d738a753d02674ed311d"), "country" : "holland", "GroupName" : "dave" } > > db.Team.find({"GroupName":"kevin"}, function (err, teams) {console.log(teams)}) { "_id" : ObjectId("5305d71aa753d02674ed311c"), "country" : "belgium", "GroupName" : "kevin" } 

 > 

编辑3

当打开mongoose.set(“debug”,true)时,它显示mongo正在查找集合teams.find()而不是Team.find()中的数据。

 20 Feb 13:46:29 - [nodemon] starting `node app.js` Mongoose: teams.find({}) { fields: undefined } [] 

我认为这是因为你在与MongoDBbuild立连接之前正在执行查询。 mongoose.connect是一个asynchronous函数,在执行查询之前,您必须等待它的callback被调用。 像这样尝试…

 mongoose.connect('mongodb://localhost/basingCOM', function (err) { if (err) throw err; console.log("Successfully connected to MongoDB"); Team.find({"GroupName":"kevin"}, function (err, teams) {console.log(teams)}) }); 

尝试改变

 mongoose.model('Team', teamSchema); mongoose.connect('mongodb://localhost/basingCOM'); var Team = mongoose.model('Team'); Team.find({"GroupName":"kevin"}, function (err, teams) {console.log(teams)}) 

 var teamModel = mongoose.model('Team', teamSchema); mongoose.connect('mongodb://localhost/basingCOM'); teamModel.find({"GroupName":"kevin"}, function (err, teams) {console.log(teams)}); 

通常我做不同的方式,但我认为这样可以帮助你…