我正在尝试使用mongoose(最新版本)从我的mongoDB返回一个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`
[]
对于你所有帮助的人来说,真的很感激。我慢慢地,但肯定地到达那里:)
编辑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
我创建了一个新架构(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 }
[]
答案 0 :(得分:1)
我认为这是因为您在与MongoDB建立连接之前正在执行查询。 mongoose.connect
是一个异步函数,您必须等待它的回调在您执行查询之前被调用。试试这样......
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)})
});
答案 1 :(得分:0)
尝试更改
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)});
通常情况下,我采取不同的方式,但我认为这种方式可以帮助你......