各位前輩好,目前正在學習 MongoDB 遇到一個問題卡住,希望能得到解答:
我在 mocha 的 beforeEach hook 裡寫了這段 code
beforeEach((done) => {
mongoose.connection.collections.mariochars.drop(() => done() )
})
然後這邊是我的 model
const MarioChar = mongoose.model('marioChar', MarioCharSchema)
我的問題是:
1.在第一個 hook 裡面的 mariochars 跟 model 的 marioChar 是一樣的嗎,因為上網查了一下發現他們都是集合名稱,但兩個名字不一樣依然能 run 出想要的效果
2.如果是的話,為什麼我把 hook 裡面的 mariochars 改成 marioChars 程式就會跳錯呢?
以上兩個問題,還盼請請坐不吝解答,謝謝!
假設你沒有提供collection的話,他會將你提供的model name轉換成複數變成collection。
如果你有呼叫mongoose.connection.collections
看看的話,你就會看到他是一個obj,然後以轉換成複數的name作為key,因此你的key不對js一定會報錯。
你可以參考看看mogoose的原始碼:
if (!collection) {
collection = schema.get('collection') ||
utils.toCollectionName(name, _mongoose.pluralize());
}
exports.toCollectionName = function(name, pluralize) {
if (name === 'system.profile') {
return name;
}
if (name === 'system.indexes') {
return name;
}
if (typeof pluralize === 'function') {
return pluralize(name);
}
return name;
};
function pluralize(str) {
let found;
str = str.toLowerCase();
if (!~uncountables.indexOf(str)) {
found = rules.filter(function(rule) {
return str.match(rule[0]);
});
if (found[0]) {
return str.replace(found[0][0], found[0][1]);
}
}
return str;
}
希望有回答到你的問題^_^