Mongoose索引后的Mongo数据库修复名称?
Mongoose与Node和Mongo数据库交互的方式,我有一个非常奇怪的问题。
我使用express来创build一个基本的get apipath来从我的mongodb中获取一些数据。
我有一个名为testing的数据库,它有一个集合电话“billings”
所以架构和路由是非常基本的
apiRouter.route( '/计费/')
.get(function(req, res) { Billing.find(function(err, billings) { if (err) res.send(err); // return the bills res.json(billings); }); });
“帐单”是我的mongoose模式。 只有1个对象{test:string}
这工作得很好,我得到了我所有的项目在我的名为“比林斯”,这是只有一个项目{testing:“成功”}的所有项目的回应
接下来我创build了一个名为“历史”的集合
我设置了与我的帐单完全相同的设置。
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); }); });
再一次“历史”是我的mongoose模式。 这个模式与我的账单设置是一样的,因为我没有任何真实的数据,字段是相同的,我只是用testing字段,所以从billings和历史回报json对象应该已经
{testing:“成功”}
不过,这一次我没有收到任何数据,我只是得到一个空的对象
[]。
我多次浏览了我的代码,以确保可能有一个资本迷路了,或者逗号等等,但是代码是一样的。 在我的MongoDB中的设置和格式是相同的。 我进入robomongo并查看数据库,一切都正确命名。
除了我现在有两个新的collections。
我原来的:“历史”和一个全新的收集“历史”
一旦我固定我的api路线去看历史,而不是Historys,我能够成功地获得testing数据。 然而,我仍然无法从Historys中提取数据,就像它不存在,但当我刷新的时候它就在我的robomongo控制台中。
我search了我所有的代码,提供历史logging,并得到0结果。 系统知道如何修复我的collections中的语法?
从文档:
当没有收集parameter passing时,Mongoose通过将模型名称传递给utils.toCollectionName方法来生成一个集合名称。 这种方法复数名称。 如果您不喜欢这种行为,请传递集合名称或设置您的模式集合名称选项。
所以,当你在模式定义中这样做的时候:
mongoose.model('Historys', YourSchema);
,mongoose创造了Histories
collections。
当你这样做时:
db.historys.insert({ test: "success" })
通过mongodb
控制台,如果historys
集合不存在,它将被创build。 这就是为什么你的数据库中有两个集合。 就像文档说的那样,如果你不希望mongoose
根据你的模型创build一个复数名称的集合,只需指定你想要的名字。