因?yàn)橐粋€(gè)同學(xué)的推薦僚碎,項(xiàng)目中使用了Mongoose作為MongoDB的接口。在從MongoDB原生Node.js接口轉(zhuǎn)到Mongoose的過(guò)程中遇到了一系列問(wèn)題植榕,記錄一下幻馁。
一個(gè)collection存放多種不同類(lèi)型數(shù)據(jù)
由于MongoDB是非關(guān)系型數(shù)據(jù)庫(kù),所以按理來(lái)說(shuō)里面塞什么都可以售睹,但是Mongoose里Schema的操作把MongoDB作為一個(gè)關(guān)系型數(shù)據(jù)庫(kù)使用桩警。使用過(guò)程中發(fā)現(xiàn)可以通過(guò)注冊(cè)多個(gè)schema在一個(gè)collection里實(shí)現(xiàn)同一個(gè)collection存放不同數(shù)據(jù)結(jié)構(gòu)。
var storySchema = Schema({
creator :String,
title : String
});
var paperSchema = Schema({
creator :String,
title : String,
rank : Number
});
//把兩個(gè)Schema注冊(cè)到同一個(gè)collection-- books
var Story = mongoose.model('Story', storySchema,'books');
var Paper = mongoose.model('Paper', paperSchema,'books');
聯(lián)合查找
同樣是因?yàn)閚ode的異步特性和MongoDB的非關(guān)系性讓聯(lián)合查找極其困難昌妹,不過(guò)可以通過(guò)populate
函數(shù)實(shí)現(xiàn)通過(guò)ref: 'Model注冊(cè)名'
預(yù)先設(shè)定好的外鍵替換為其他表中的object捶枢。
具體可見(jiàn):
在mongoose中填充外鍵
總體來(lái)說(shuō)Mongoose還是比較坑的,下一個(gè)項(xiàng)目還是用回原生的MongoDB接口吧飞崖。烂叔。。