我对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个结果。系统在哪里知道修复我的集合中的语法?
答案 0 :(得分:1)
来自文档:
当没有传递集合参数时,Mongoose通过将模型名称传递给utils.toCollectionName方法来生成集合名称。该方法使名称复数化。如果您不喜欢此行为,请传递集合名称或设置模式集合名称选项。
因此,当您在架构定义中执行此操作时:
mongoose.model('Historys', YourSchema);
,mongoose创建了Histories
集合。
当你这样做时:
db.historys.insert({ test: "success" })
通过mongodb
控制台,如果historys
集合不存在,则会创建它。这就是为什么你的数据库中有两个集合的原因。与文档说的一样,如果您不希望mongoose
根据您的模型创建具有复数名称的集合,只需指定您想要的名称。