Mongo数据库修复Mongoose索引后的名称?

时间:2015-03-18 15:48:15

标签: node.js mongodb express mongoose

我对Mongoose与我的Node和Mongo数据库进行交互的方式有一个非常奇怪的问题。

我正在使用express创建一个基本的get api路由来从我的mongodb中获取一些数据。

我有一个名为test的数据库,它有一个收集调用" billings"

所以架构和路线非常基本

  

apiRouter.route(' /计费/&#39)

    .get(function(req, res) {
        Billing.find(function(err, billings) {
            if (err) res.send(err);

            // return the bills
            res.json(billings);
        });
    }); 

" Billing"是我的猫鼬模式。只有一个对象{test:string}

这很好用,我收到了对我的mongo db中所有项目的响应,叫做" billings"这只是一个项目{test:" success"}

接下来,我创建了一个名为" historys"

的集合

我设置与我的账单完全相同的设置。

  

apiRouter.route(' / historys /&#39)

    // get all the history
    .get(function(req, res) {
        Historys.find(function(err, historys) {
            if (err) res.send(err);

            // return the history
            res.json(historys);
        });
    }); 

再次" Historys"是我的猫鼬模式。这个架构在设置上和我的账单相同,因为我没有任何实际数据,字段是相同的,我只是用测试字段,所以从账单和历史记录返回的json对象应该是

  

{test:"成功" }

然而,这次我没有得到任何数据,我只是得到一个空对象

  

[]。

我多次查看我的代码以确保资金可能丢失,或者某个地方使用逗号等,但代码完全相同。我的mongodb中的设置和格式是相同的。我进入了robomongo并查看了数据库,所有内容都被正确命名。

除此之外,我现在有2个新系列。

我的原创:" Historys"和一个全新的系列"历史"

一旦我修复了我的api路线去看看Histories而不是Historys,我就能够成功获得测试数据。然而,我仍然无法从Historys中提取数据,它就像它不存在那样,当我刷新时,它在我的robomongo控制台中。

我搜索了所有代码以查找历史记录并得到0个结果。系统在哪里知道修复我的集合中的语法?

1 个答案:

答案 0 :(得分:1)

来自文档:

  

当没有传递集合参数时,Mongoose通过将模型名称传递给utils.toCollectionName方法来生成集合名称。该方法使名称复数化。如果您不喜欢此行为,请传递集合名称或设置模式集合名称选项。

因此,当您在架构定义中执行此操作时:

mongoose.model('Historys', YourSchema);

,mongoose创建了Histories集合。

当你这样做时:

db.historys.insert({ test: "success" })

通过mongodb控制台,如果historys集合不存在,则会创建它。这就是为什么你的数据库中有两个集合的原因。与文档说的一样,如果您不希望mongoose根据您的模型创建具有复数名称的集合,只需指定您想要的名称。