【问题标题】:Mongo Database Fixing Names after Mongoose Index?Mongoose 索引后的 Mongo 数据库修复名称?
【发布时间】:2015-05-21 12:03:18
【问题描述】:

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

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

我有一个名为 test 的数据库,它有一个名为“billings”的集合

所以架构和路由非常基本

apiRouter.route('/billing/')

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

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

“计费”是我的猫鼬模式。只包含 1 个对象 {test: string}

这很好用,我的 mongo 数据库中的所有项目都得到了响应,名为“billings”,它只有一个项目 {test: “success”}

接下来我创建了一个名为“historys”的集合

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

apiRouter.route('/historys/')

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

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

“历史”又是我的猫鼬模式。这个模式在设置上与我的帐单相同,因为我没有任何真实数据,字段相同,我只是有一个测试字段,所以从帐单和历史记录返回的 json 对象应该是

{ 测试:“成功” }

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

[].

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

除了,我现在有 2 个新系列。

我的原创:“历史”和一个全新的收藏“历史”

一旦我修复了我的 api 路线去查看历史而不是历史,我就能够成功地获取测试数据。但是,我仍然无法从历史记录中提取数据,它就像它不存在但我刷新时它在我的 robomongo 控制台中一样。

我在所有代码中搜索了任何提及历史的内容,结果为 0。系统在哪里知道要修复我收藏的语法?

【问题讨论】:

  • 您是如何将{ test: "success" } 插入到Historys 集合中的?

标签: node.js mongodb express mongoose


【解决方案1】:

来自文档:

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

所以,当你这样做时,在你的架构定义中,这个:

mongoose.model('Historys', YourSchema);

,猫鼬创建了Histories 集合。

当你这样做时:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-15
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 2018-05-06
    • 1970-01-01
    相关资源
    最近更新 更多