mongoose學(xué)習(xí)筆記1之迅速開始

學(xué)習(xí)mongoose之前,需要先安裝好,mongodb和node.js

mongodb簡介(引自菜鳥教程

MongoDB 是由C++語言編寫的,是一個(gè)基于分布式文件存儲(chǔ)的開源數(shù)據(jù)庫系統(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)對組成。MongoDB 文檔類似于 JSON 對象。字段值可以包含其他文檔,數(shù)組及文檔數(shù)組。


安裝mongodb。我選擇使用brew安裝(我用的是mac)

如果你未安裝brew,請?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 

更新過程可能很漫長,啥動(dòng)靜都沒有,請耐心等待。

更新完之后,你就可以安裝mongodb了。在終端的命令如下:

brew install mongodb

安裝完成后,會(huì)提示你啟動(dòng)Mongodb的方法,此時(shí)你在終端輸入如下命令行:

mongod --config /usr/local/etc/mongod.conf

如果此時(shí)沒反應(yīng),那么就說明你啟動(dòng)成功了。你可以在瀏覽器中輸入http://localhost:27017/,就能看的如下結(jié)果。

WechatIMG1055.jpeg

如果終端出現(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ù)庫后,重啟不了。那就到/usr/local/opt/mongodb/bin目錄執(zhí)行

./mongod --repair

然后重啟mongod

mongod --config /usr/local/etc/mongod.conf

安裝mongoose可視化工具

我推薦工具Robomongo
下載地址。然后安裝。在mac下,系統(tǒng)不會(huì)允許你安裝不受信任的app,請?jiān)谠O(shè)置-安全與隱私中選擇任何來源。然后就可以安裝了。
如果你已經(jīng)啟動(dòng)了mongodb,那么打開使用Robomongo連接localhost:27017。

WechatIMG1056.jpeg


安裝node.js


點(diǎn)擊安裝教程

準(zhǔn)備工作做好了,接下來開始mongoose之旅。

快速開始mongoose

接下來使用命令行安裝mongoose (npm使用介紹

npm install mongoose

我喜歡貓,我想要將我遇到的每一只貓記錄到mongodb中。首先,需要在我們的項(xiàng)目中包含mongoose,然后連接test-我們運(yùn)行在本地的MongoDB實(shí)例數(shù)據(jù)庫。
在項(xiàng)目中創(chuàng)建 getting-started.js。

// getting-started.js    <em>連接數(shù)據(jù)庫</em>
let mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/test');

現(xiàn)在我們已經(jīng)嘗試連接了本地的測試數(shù)據(jù)庫。我們需要在連接數(shù)據(jù)庫成功或連接失敗的時(shí)候得到通知。

let db = mongoose.connection;
db.on('error',()=>{
    console.error('連接失敗');
});
db.once('open', function () {
    //回調(diào)函數(shù)
 });

一旦我們鏈接成功,我們的回調(diào)函數(shù)將被調(diào)用。為了簡潔,我們假定接下來的所有代碼都在這個(gè)回調(diào)函數(shù)內(nèi)。

在Mongoose中,一切都是從Schema(模式)而來。接下來,我們將定義我們的貓。

let kittySchema = mongoose.Schema({
  name:String
});

到目前還好,我們已經(jīng)得到了一個(gè)模式,帶有一個(gè)屬性name,name是一個(gè)字符串。接下來,我們將把我們的模式編譯成模型。

let Kitten = mongoose.model('Kitten',kittySchema);

一個(gè)模型是我們構(gòu)造文檔的一個(gè)類(文檔是MongoDB中數(shù)據(jù)的基本單元,非常類似于,關(guān)系型數(shù)據(jù)庫管理系統(tǒng)中的行)。既然這樣,每個(gè)文檔就是一只貓,這只貓上帶有我們在模式中已經(jīng)定義好的屬性和行為。接下來,讓我們創(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ì)說話的貓,但是我們還有保存任何東西到數(shù)據(jù)庫中。每個(gè)文檔都可以使用save方法保存到數(shù)據(jù)庫中。無論發(fā)生什么事情,save方法的第一個(gè)參數(shù)都是error。

silence.save(function(err,silence){
 if(err){
     return console.log(err);
 }else{
     console.log('保存成功');
 }
});

隨著時(shí)間的流逝,我們想要看看我們之前存在數(shù)據(jù)庫中的貓,我們可以通過 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表示我們查找的對象。

如果你想找到所有小貓的記錄,你可以去掉查找條件。

 Kitten.find(function(err,target){
  if(err){
      console.error(err);
  }else{
      console.log(target);
  }
});

你可以用正則查詢

Kitten.find({ name: /^Fluff/ }, callback)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容