我的路线设置使用了一个名为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
干杯
答案 0 :(得分:57)
所以这看起来很像是你已经在现有数据库中创建了集合,现在你正试图用mongoose模型访问它们。
问题是mongoose使用了一些您可能不知道的默认值,因此您在shell中显示的示例与mongoose默认情况下的示例不同。
因此,您可以重命名集合以匹配默认情况下mongoose所期望的集合,或者更改mongoose与您现有名称匹配的内容。在后一种情况下,您可以直接定义模型名称,如下所示:
mongoose.model( "Todo", toDoSchema, "Todo" );
因此method的第三个参数实际上指定了用于集合的显式名称。如果没有这个,默认规则下的假定名称将是" todos"。
使用任何一种方法,以使它们匹配。