猫鼬find()不返回结果

Posted

技术标签:

【中文标题】猫鼬find()不返回结果【英文标题】:Mongoose find() not returning result 【发布时间】:2014-05-30 18:54:41 【问题描述】:

我有一个使用名为 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 个结果。我期待这个结果由 find 查询返回。 有什么我错过的吗? 我正在使用猫鼬 3.6

干杯

【问题讨论】:

你确定你在你的程序中连接到同一个数据库,就像你使用 shell 做的那样?如果您不确定,请将您的数据库连接代码和与 shell 的连接示例添加到您的问题中。 我添加了您要求的更多信息 还注意到默认情况下 mongoose 将模型名称复数,并将其转换为小写和其他规则。所以除非你覆盖它,猫鼬正在寻找一个名为“todos”的集合,它可能不存在。 【参考方案1】:

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

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

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

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

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

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

【讨论】:

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

以上是关于猫鼬find()不返回结果的主要内容,如果未能解决你的问题,请参考以下文章

猫鼬返回聚合结果,如猫鼬分页

猫鼬在查找中排除时返回默认值

模型没有返回预期的结果

猫鼬聚合返回空结果[重复]

猫鼬聚合返回空结果[重复]

带有 Q 承诺的 Node.JS 猫鼬请求返回空