Javascript Mongoose find()未返回结果
我设置了一个路由,它使用一个名为Todo的模型,如下所示:Javascript Mongoose find()未返回结果,javascript,node.js,mongodb,mongoose,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 al
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'
}
myserver.js中的连接如下:
var db = require('./config/db');
mongoose.connect(db.url);
在Mongo Shell中,我得到1个结果。我希望find查询返回这个结果。
我错过了什么吗?
我用的是猫鼬3.6
干杯这看起来很像是您已经在现有数据库中创建了集合,现在您正试图使用mongoose模型访问这些集合 问题是mongoose使用了一些您可能不知道的默认值,因此您在shell中显示的示例与mongoose默认使用的示例不同 因此,您可以重命名集合以匹配mongoose在默认情况下的期望,也可以更改mongoose的操作以匹配现有名称。在后一种情况下,直接定义模型名称,如下所示: 猫鼬模型(“Todo”,toDoSchema,Todo”); 因此,的第三个参数实际上指定了用于集合的显式名称。如果没有此项,默认规则下的假定名称将为“TODO”
使用这两种方法都可以使它们匹配。您确定在程序中连接的数据库与使用shell时连接的数据库相同吗?如果您不确定,请在问题中添加您的数据库连接代码和您与shell连接的示例。我已经添加了您请求的更多信息,还注意到mongoose默认情况下会将模型名称复数,并将其转换为小写和其他规则。因此,除非您覆盖此项,否则mongoose正在寻找一个名为“todos”的集合,该集合可能不存在辉煌:):Di在两个小时内遇到了类似的问题,我需要在我收藏的名字后面加上“s”,天哪。。。TYCan不相信这个答案仍然正确我甚至没有碰我的be/mongo/fe,什么都没有,30多天后它停止返回结果(返回一个空数组)。经过几个小时的痛苦,我终于找到了这条线索。我加入了第三个论点,它奏效了。我不明白这怎么还没修好。不管怎样,未来的读者,只需添加第三个论点,不要相信猫鼬。