Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json Mongoose返回empy对象,在Mongoshell中工作_Json_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Json Mongoose返回empy对象,在Mongoshell中工作

Json Mongoose返回empy对象,在Mongoshell中工作,json,node.js,mongodb,express,mongoose,Json,Node.js,Mongodb,Express,Mongoose,我正在尝试使用mongoose(最新版本)从我的mongoDB返回一个JSON对象。一切都正常,但我得到一个返回的空数组[] app.js /*/////////////////////////////////////////////////////////////////////////////////////////////////////////// dependencies /////////////////////////////////////////////////////////

我正在尝试使用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)
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)});