Model.find()在mongoose中返回empty

时间:2013-09-05 05:47:04

标签: node.js mongodb express mongoose

我正在使用mongoose列出mongodb中db中集合的所有数据:

来自请求:

http://localhost:3000/listdoc?model=Organization

我正在执行以下代码:

exports.listDoc = function(req, res) {    
var Model = mongoose.model(req.query.model); //This is defined and returns my desired model name
        Model.find().populate('name').exec(function(err, models) {
            if (err) {
                res.render('error', {
                    status: 500
                });
            } else {
                res.jsonp(models);
            }
        });
};

我已经在数据库中输入了 但上面的代码返回空。为什么呢?

编辑:以下代码也返回空:

exports.listDoc = function(req, res) {
    var Model = mongoose.model(req.query.model);
    Model.find({},function(err,models){
        console.log(models);
         if (err) {
            res.render('error', {
                status: 500
            });
        } else {
            res.jsonp(models);
        }
    });
};

使用的架构:

var Organization = mongoose.Schema({
  name: String
});

3 个答案:

答案 0 :(得分:64)

你的问题是mongoose复数集合。 Mongoose正在查询“组织”,但您的数据是mongodb作为“组织”。让它们匹配,你应该很高兴。你可以通过mongo shell在mongodb中重命名它,或者告诉mongoose。来自mongoose docs:

var schema = new Schema({ name: String }, { collection: 'actor' });

// or

schema.set('collection', 'actor');

// or

var collectionName = 'actor'
var M = mongoose.model('Actor', schema, collectionName)

答案 1 :(得分:0)

来自官方doc

  

人口是自动替换指定的过程   文档中包含来自其他集合的文档的路径。

尝试不用填充

Model.find({}).exec(function(err, models) {
            if (err) {
                res.render('error', {
                    status: 500
                });
            } else {
                res.json(models);
            }
        });

答案 2 :(得分:0)

我会更简单地使 Peter Lyons 回答,只添加mongodb集合名称( s letter ) 。例如,如果您创建要调用用户或密码的集合,只需在最后一个单词中写 s 字母( 用户 密码 )。