Mongoose find()不返回结果

我build立了一个使用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,因为它没有find任何结果。 当我运行:

 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查询返回。 有什么我错过了吗? 我正在使用Mongoose 3.6

干杯

所以,这看起来像是你已经在现有的数据库中创build了集合,现在你正试图用mongoose模型来访问这些集合。

问题是mongoose使用了一些你可能没有意识到的默认值,所以你在shell中显示的例子与默认的mongoose不一样。

因此,您可以重新命名您的集合以匹配默认预期的mongoose或更改mongoose确实匹配您的现有名称。 在后一种情况下,您可以直接定义模型名称,如下所示:

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

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

使用任何方法为了使他们匹配。

面对同样的问题,但在我的情况下,我使用了一个查询filter,如model.find({"someId": myVar}, ...) ,但myVar包含以前从Mongoose,而不是一个string检索的ObjectID

使用console.log(myVar); ,它看起来像我使用的是一个string,但是console.log(typeof myVar); 告诉我,我不是(显示object而不是string )。