集合存在,但Mongoose查询返回空集

时间:2017-07-17 22:14:47

标签: node.js mongodb express mongoose

我安装了MongoDB,其数据库名为Collector,其中包含名为Msg的集合。 当我使用mongo shell查看它时,我得到65个结果。

但是,当使用下面的Mongoose代码查询MongoDB时,我得到一个空集:

var Msg = mongoose.model('Msg', {
    process: String
    // omitted fields
});

server.use(express.static('./client')); // Serve the client

server.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers",
               "Origin, X-Requested-With, Content-Type, Accept");
    next();
});

// Return to the client a JSON object containing *ALL* msgs
server.get('/msgs', function(req, res) {
    Msg.find().exec(function(err, msgs) {
        log(`err: ${err}`);
        log(`/msgs => Found ${msgs.length} msgs`);
        res.json(msgs);
    });
});

一切似乎都没问题,但它不起作用:访问localhost:3000/msgs会产生一个空的结果对象。那么这段代码有什么问题呢?

1 个答案:

答案 0 :(得分:1)

原来问题出现在集合的名称中:我将其命名为Msg,而显然,如果模型名称为Msgs,Mongo默认会在Msg中查找。这里的解决方案是在Model调用中添加第3个arg:

var Msg = mongoose.model('Msg', {
    process: String
    // omitted fields
}, 'Msg'); // <-- collection name