Mongoose find() 不返回结果

IT技术 javascript node.js mongodb mongoose
2021-03-03 02:05:27

我有一个使用名为 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个回答

所以这看起来很像您已经在现有数据库中创建了集合,现在您正在尝试使用 mongoose 模型访问这些集合。

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

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

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

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

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

节省了我生命中的 3-4 个小时。:)
2021-04-24 02:05:27
我遇到了类似的问题 2 小时,我需要在我的收藏名称后添加“s”,天啊...TY
2021-04-25 02:05:27
太棒了 :) :D
2021-04-26 02:05:27
不敢相信这个答案仍然是真的
2021-04-30 02:05:27
我什至没有碰我的 be/mongo/fe,什么都没有,30 多天后它停止返回结果(返回一个空数组)。经过几个小时的痛苦,我到达了这个线程。我添加了第三个参数并且它起作用了。我无法理解这还没有修复。无论如何,未来的读者,只需添加第三个参数,不要相信mongoose。
2021-05-14 02:05:27