猫鼬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()不返回结果的主要内容,如果未能解决你的问题,请参考以下文章