Json Mongoose返回empy对象,在Mongoshell中工作
我正在尝试使用mongoose(最新版本)从我的mongoDB返回一个JSON对象。一切都正常,但我得到一个返回的空数组[] app.jsJson Mongoose返回empy对象,在Mongoshell中工作,json,node.js,mongodb,express,mongoose,Json,Node.js,Mongodb,Express,Mongoose,我正在尝试使用mongoose(最新版本)从我的mongoDB返回一个JSON对象。一切都正常,但我得到一个返回的空数组[] app.js /*/////////////////////////////////////////////////////////////////////////////////////////////////////////// dependencies /////////////////////////////////////////////////////////
/*///////////////////////////////////////////////////////////////////////////////////////////////////////////
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)
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)})
db.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)
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:)
编辑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 我创建了一个新的模式(bookschema),并尝试使用booksModel而不是teamModel编写代码。输出是一个正确的JSON对象。所以它适用于BookModel,但不适用于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()中查找数据
我认为这是因为您是在与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)})
});
试着改变现状
mongoose.model('Team', teamSchema);
mongoose.connect('mongodb://localhost/basingCOM');
var Team = mongoose.model('Team');
Team.find({"GroupName":"kevin"}, function (err, teams) {console.log(teams)})
到
通常我会用不同的方法,但我认为这种方法可以帮助您……我仍然得到一个空对象[]我找到了这个引用,它显示了您的示例。我认为,如果您在创建模式之前进行连接,这是一个很好的工作机会。我也尝试了您的方法,在connect上使用回调,但我仍然有一个空对象[],我只是从您的EDIT 1中运行了确切的代码,我在控制台中得到了一个非空数组。所以代码很好。请在获得正确结果的地方共享您的mongo shell输出标签,谢谢。。。我更改了我的帖子,请阅读我的编辑2和“控制台输出”添加了编辑3,这与mongo没有找到正确的集合(团队对团队)有关,这就是问题所在。当您执行mongoose.model('Team',teamSchema)时,它将映射到数据库中名为“teams”而不是“Team”的集合。我想这是猫鼬的惯例。
var teamModel = mongoose.model('Team', teamSchema);
mongoose.connect('mongodb://localhost/basingCOM');
teamModel.find({"GroupName":"kevin"}, function (err, teams) {console.log(teams)});