【发布时间】:2014-03-21 06:28:55
【问题描述】:
我正在尝试使用 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 对象,但是当我在我的节点应用程序中使用它时,控制台会吐出一个 empty对象。
20 Feb 11:47:06 - [nodemon] restarting due to changes...
20 Feb 11:47:06 - [nodemon] starting `node app.js`
[]
感谢您的所有帮助,非常感谢。我正在缓慢但肯定地到达那里 :)
编辑 1
我将 db.js 更改为此(使用下面的 cmets),但我仍然有一个空对象。
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 }
[]
【问题讨论】:
标签: json node.js mongodb express mongoose