Mongoose find()没有返回结果

use*_*643 17 javascript mongoose mongodb node.js

我有一个路由设置,使用一个名为Todo的模型,如下所示:

app.get('/api/todos', function(req, res) {
    Todo.find({},function(err, todos) {
        if (err)
            res.send(err);
        console.log("number of todos " + todos.length);
        res.json(todos); // return all todos in JSON format
    });
});
Run Code Online (Sandbox Code Playgroud)

但是,todos.length始终为0,因为它没有找到任何结果.当我跑:

use test3
db.Todo.find() 
Run Code Online (Sandbox Code Playgroud)

我确信我已连接到同一个数据库.我可以在mongod控制台中看到连接.我的连接在config/db.js文件中:

module.exports = {
    url : 'mongodb://localhost/test3'
}
Run Code Online (Sandbox Code Playgroud)

我的server.js中的连接如下:

var db = require('./config/db');
mongoose.connect(db.url);
Run Code Online (Sandbox Code Playgroud)

在Mongo Shell我得到1个结果.我希望通过查询查询返回此结果.有没有我错过的东西?我使用的是Mongoose 3.6

干杯

Nei*_*unn 61

所以这看起来很像是你已经在现有数据库中创建了集合,现在你正试图用mongoose模型访问它们.

问题是mongoose使用了一些您可能不知道的默认值,因此您从shell中显示的示例与默认情况下mongoose正在执行的示例不同.

因此,您可以重命名集合以匹配默认情况下mongoose所期望的集合,或者更改mongoose与现有名称匹配的内容.在后一种情况下,您可以直接定义模型名称,如下所示:

mongoose.model( "Todo", toDoSchema, "Todo" );
Run Code Online (Sandbox Code Playgroud)

因此,该方法的第三个参数实际上指定了用于集合的显式名称.如果没有这个,默认规则下的假定名称将是"todos".

使用任一方法,以使它们匹配.