學(xué)習(xí)mongoose之前柳琢,需要先安裝好牍帚,mongodb和node.js
mongodb簡(jiǎn)介(引自菜鳥(niǎo)教程)
MongoDB 是由C++語(yǔ)言編寫(xiě)的晶衷,是一個(gè)基于分布式文件存儲(chǔ)的開(kāi)源數(shù)據(jù)庫(kù)系統(tǒng)嗽元。
在高負(fù)載的情況下,添加更多的節(jié)點(diǎn)掠兄,可以保證服務(wù)器性能像云。
MongoDB 旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。
MongoDB 將數(shù)據(jù)存儲(chǔ)為一個(gè)文檔蚂夕,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對(duì)組成迅诬。MongoDB 文檔類似于 JSON 對(duì)象。字段值可以包含其他文檔婿牍,數(shù)組及文檔數(shù)組侈贷。
安裝mongodb。我選擇使用brew安裝(我用的是mac)
如果你未安裝brew,請(qǐng)?jiān)诮K端使用如下命令:
curl -LsSf http://github.com/mxcl/homebrew/tarball/master | sudo tar xvz -C/usr/local --strip 1
當(dāng)brew安裝完成后等脂,你需要先更新一下
brew update
更新過(guò)程可能很漫長(zhǎng)铐维,啥動(dòng)靜都沒(méi)有,請(qǐng)耐心等待慎菲。
更新完之后,你就可以安裝mongodb了锨并。在終端的命令如下:
brew install mongodb
安裝完成后露该,會(huì)提示你啟動(dòng)Mongodb的方法,此時(shí)你在終端輸入如下命令行:
mongod --config /usr/local/etc/mongod.conf
如果此時(shí)沒(méi)反應(yīng)第煮,那么就說(shuō)明你啟動(dòng)成功了解幼。你可以在瀏覽器中輸入http://localhost:27017/,就能看的如下結(jié)果包警。
如果終端出現(xiàn) -bash: mongod: command not found
可以用如下代碼解決
export PATH="$PATH:/usr/local/opt/mongodb/bin"
其中$PATH后面代表的是你mongodb安裝的路徑撵摆。如果你是用brew安裝,那就是這個(gè)路徑害晦。
然后進(jìn)入/usr/local/opt/mongodb/bin目錄,執(zhí)行如下命令
./mongo
如果啟動(dòng)時(shí)出現(xiàn)其他錯(cuò)誤特铝,你或許需要使用如下命令暑中,建立mongdb的存儲(chǔ)文件夾
mkdir -p /data/db
如果還不行,就谷歌吧鲫剿。
如果關(guān)閉mongodb數(shù)據(jù)庫(kù)后鳄逾,重啟不了。那就到/usr/local/opt/mongodb/bin目錄執(zhí)行
./mongod --repair
然后重啟mongod
mongod --config /usr/local/etc/mongod.conf
安裝mongoose可視化工具
我推薦工具Robomongo
下載地址灵莲。然后安裝雕凹。在mac下,系統(tǒng)不會(huì)允許你安裝不受信任的app政冻,請(qǐng)?jiān)谠O(shè)置-安全與隱私中選擇任何來(lái)源枚抵。然后就可以安裝了。
如果你已經(jīng)啟動(dòng)了mongodb明场,那么打開(kāi)使用Robomongo連接localhost:27017汽摹。
安裝node.js
點(diǎn)擊安裝教程
準(zhǔn)備工作做好了,接下來(lái)開(kāi)始mongoose之旅榕堰。
快速開(kāi)始mongoose
接下來(lái)使用命令行安裝mongoose (npm使用介紹)
npm install mongoose
我喜歡貓竖慧,我想要將我遇到的每一只貓記錄到mongodb中。首先逆屡,需要在我們的項(xiàng)目中包含mongoose,然后連接test-我們運(yùn)行在本地的MongoDB實(shí)例數(shù)據(jù)庫(kù)圾旨。
在項(xiàng)目中創(chuàng)建 getting-started.js。
// getting-started.js <em>連接數(shù)據(jù)庫(kù)</em>
let mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/test');
現(xiàn)在我們已經(jīng)嘗試連接了本地的測(cè)試數(shù)據(jù)庫(kù)魏蔗。我們需要在連接數(shù)據(jù)庫(kù)成功或連接失敗的時(shí)候得到通知砍的。
let db = mongoose.connection;
db.on('error',()=>{
console.error('連接失敗');
});
db.once('open', function () {
//回調(diào)函數(shù)
});
一旦我們鏈接成功,我們的回調(diào)函數(shù)將被調(diào)用莺治。為了簡(jiǎn)潔廓鞠,我們假定接下來(lái)的所有代碼都在這個(gè)回調(diào)函數(shù)內(nèi)。
在Mongoose中谣旁,一切都是從Schema(模式)而來(lái)床佳。接下來(lái),我們將定義我們的貓榄审。
let kittySchema = mongoose.Schema({
name:String
});
到目前還好砌们,我們已經(jīng)得到了一個(gè)模式,帶有一個(gè)屬性name,name是一個(gè)字符串搁进。接下來(lái)浪感,我們將把我們的模式編譯成模型。
let Kitten = mongoose.model('Kitten',kittySchema);
一個(gè)模型是我們構(gòu)造文檔的一個(gè)類(文檔是MongoDB中數(shù)據(jù)的基本單元饼问,非常類似于影兽,關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)中的行)。既然這樣莱革,每個(gè)文檔就是一只貓峻堰,這只貓上帶有我們?cè)谀J街幸呀?jīng)定義好的屬性和行為讹开。接下來(lái),讓我們創(chuàng)建一只貓的文檔茧妒。
let silence = new Kitten({name:"silence"});
貓會(huì)叫萧吠,那么讓我們看一看如何添加“speak"的功能到我們的文檔。
//注意:方法必須添加在模式被編譯為模型之前桐筏。
kittySchema.methods.speak = function(){
let greeting = this.name?'Memo name is '+this.name:"I don't have a name";
console.log(greeting);
}
//添加在下面代碼之前
let Kitten = mongoose.model('Kitten',kittySchema);
//此時(shí)將模式編譯成模型時(shí)纸型,會(huì)把模式功能方法屬性加入到模型的原型中,然后暴露在每個(gè)文檔實(shí)例梅忌,即這里的Kitten實(shí)例狰腌。
加入了speak功能后,我們的貓就會(huì)叫了牧氮。
silence.speak();//控制臺(tái)輸出 Memo name is silence
我們有了會(huì)說(shuō)話的貓琼腔,但是我們還有保存任何東西到數(shù)據(jù)庫(kù)中。每個(gè)文檔都可以使用save方法保存到數(shù)據(jù)庫(kù)中踱葛。無(wú)論發(fā)生什么事情丹莲,save方法的第一個(gè)參數(shù)都是error。
silence.save(function(err,silence){
if(err){
return console.log(err);
}else{
console.log('保存成功');
}
});
隨著時(shí)間的流逝尸诽,我們想要看看我們之前存在數(shù)據(jù)庫(kù)中的貓甥材,我們可以通過(guò) Kitten模型讀取所有小貓的文檔。
Kitten.find({name:'silence'},function(err,target){
if(err){
console.error(err);
}else{
console.log(target);
}
});
上述代碼的意思是性含,查找一個(gè)名字為‘silence'的貓洲赵。find的回調(diào)函數(shù)的第一個(gè)參數(shù)永遠(yuǎn)是error。target表示我們查找的對(duì)象商蕴。
如果你想找到所有小貓的記錄叠萍,你可以去掉查找條件。
Kitten.find(function(err,target){
if(err){
console.error(err);
}else{
console.log(target);
}
});
你可以用正則查詢
Kitten.find({ name: /^Fluff/ }, callback)