Mongoose find()没有返回结果

时间:2014-04-16 04:58:12

标签: javascript node.js mongodb mongoose

我的路线设置使用了一个名为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
    });
});

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

use test3
db.Todo.find() 

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

module.exports = {
    url : 'mongodb://localhost/test3'
}

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

var db = require('./config/db');
mongoose.connect(db.url);
在Mongo Shell中我得到1个结果。我希望通过查询查询返回此结果。 有没有我错过的东西? 我使用的是Mongoose 3.6

干杯

1 个答案:

答案 0 :(得分:57)

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

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

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

mongoose.model( "Todo", toDoSchema, "Todo" );

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

使用任何一种方法,以使它们匹配。