Nodejs學習筆記(十四)— Mongoose介紹和入門 && Nodejs學習筆記(十)--- 與MongoDB的互動(mongodb/node-mongodb-native)、MongoDB入門
目錄
簡介
MongoDB
開源,高效能的NoSQL資料庫;支援索引、叢集、複製和故障轉移、各種語言的驅動程式;高伸縮性;
node-mongodb-native
mongodb的nodejs驅動;
MongoDB安裝(windows)
按照官方說明在win7 64位環境下配置還是遇到了問題,我還是把我安裝配置的過程寫一下
下載MongoDB並安裝
建立資料庫和日誌存放目錄
在C盤根目錄下新建“M_DB”和“M_LOG”兩個資料夾,分別存放資料庫檔案和日誌檔案
建立一個config檔案
開啟目錄“C:\Program Files\MongoDB 2.6 Standard\bin”,並在此目錄下新建一個mongo.config檔案,檔案內容如下
##資料庫目錄 dbpath=C:\M_DB ##日誌輸出檔案 logpath=C:\M_LOG\mongodb.log
新增環境變數
在環境變數PATH中加入“C:\Program Files\MongoDB 2.6 Standard\bin“
以Windows伺服器執行MongoDB
以管理員方式開啟CMD視窗,執行如下命令安裝MongoDB服務,可以在 “控制面板\所有控制面板項\管理工具\服務”找到名為“MongoDB”的服務右鍵啟動
mongod --config "C:\Program Files\MongoDB 2.6 Standard\bin\mongo.config" --install
啟動服務
在CMD視窗中執行如下命令,也可以在可以在 “控制面板\所有控制面板項\管理工具\服務”
net start mongodb
測試連線
在CMD中執行如下命令,檢視結果
mongo
安裝成功!
最後兩步非必需;MongoDB預設埠是27017,可以修改!
對於“C:\Program Files\MongoDB 2.6 Standard\bin”目錄下的exe程式,做個簡單的說明,可能更利於瞭解可以做些什麼操作,基礎學習關注mongod.exe和mongo.exe即可
mongo.exe:客戶端,支援js語法
mongod.exe:服務端
mongodump.exe:備份工具
mongorestore.exe:恢復工具
mongoexport.exe:匯出工具
mongoimport.exe:匯入工具
mongostat.exe:實時效能監控工具
mongotop.exe:跟蹤MongDB例項讀寫時間工具
MongoDB基本語法和操作入門(mongo.exe客戶端操作)
MongoDB已經安裝好,下面先對MongoDB進行一個簡單的入門,再用node-mongodb-native去操作MongoDB
庫操作
新建資料庫:第一步:use 新建資料庫名;第二步:進行此庫相關的操作;如果不進行第二步,該資料庫不會被建立
檢視資料庫:show dbs;
新建表:db.createCollection('要新建的表名');
檢視當前資料庫下表: show collections;
刪除當前資料庫指定表:db.表名.drop();
刪除當前資料庫:db.dropDatabase();
示例操作如下圖:
1.預設為存在“admin”和“local”兩個資料庫;admin資料庫是存放管理員資訊的資料庫,認證會用到;local是存放replication相關的資料;這兩處本篇都沒有涉及到;
2.find();是個查詢操作,後面會講到,上面用到主要是為了演示use不存在的庫後,進行相關操作會創建出這個庫;
3.MongoDB沒有像MySQL或MSSQL等資料庫這麼嚴格的規定,不是非得要先建庫、建表、建各種欄位,以後的操作中慢慢的會體會到^_^!
插入
方法一:db.表名.insert(資料);
1.從上圖操作可以看出,沒有去建立“tb1”表,其實通過插入操作也會自動建立
2._id,是mongodb自已生成的,每行資料都會存在,預設是ObjectId,可以在插入資料時插入這個鍵的值(支援mongodb支援的所有資料型別)
方法二:db.表名.save(資料);
1.從上圖操作可以看出,save也可達到insert一樣的插入效果
2._id可以自已插入
3.一個表中不一定要欄位都相同
那它們有什麼區別?
從圖中操作就可以看出,雖然insert和save方法都可以插入資料,當預設的“_id”值已存在時,呼叫insert方法插入會報錯;而save方法不會,會更新相同的_id所在行資料的資訊
查詢
查詢表中所有資料:db.表名.find();
按條件查詢(支援多條件):db.表名.find(條件);
查詢第一條(支援條件):db.表名.findOne(條件);
限制數量:db.表名.find().limit(數量);
跳過指定數量:db.表名.find().skip(數量);
從上圖中可以看出具體用法,批量插入預設資料我用了一個javascript語法迴圈;
比較查詢
大於:$gt
小於:$lt
大於等於:$gte
小於等於:$lte
非等於:$ne
上面看到了AND的關係,或者的關係應該怎麼用?
或者:$or
in和not in查詢(包含、不包含) $in $nin
查詢數量:db.表名.find().count();
排序:db.表名.find().sort({"欄位名":1});
1:表示升序 -1:表示降序
指定欄位返回: db.表名.find({},{"欄位名":0});
1:返回 0:不返回
查詢就講到這裡了,感覺查詢示例一下講不完,還有些高階查詢,大家自行去了解一下吧^_^!
修改
前面save在_id欄位已存在是就是修改操作,按指定條件修改語法如下
db.表名.update({"條件欄位名":"欄位值"},{$set:{"要修改的欄位名":"修改後的欄位值"}});
刪除
db.表名.remove(條件);
儲存過程
建立儲存過程:
db.system.js.save({_id:"儲存過程ID", value:function(引數){ -- 邏輯主體; return 返回; }});
呼叫儲存過程
db.eval("儲存過程ID()");
所有儲存過程都存放在db.system.js中
MongoDB基本操作就講這麼多了,基本夠用,深入學習大家自已去看看API^_^!
nodejs操作MongoDB
先用npm安裝mongodb
npm install mongodb
安裝成功後,繼續在上面操作建立的庫和表中操作
插入
示例原始碼
查詢
var MongoClient = require('mongodb').MongoClient; var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1'; var selectData = function(db, callback) { //連線到表 var collection = db.collection('tb2'); //查詢資料 var whereStr = {"name":'wilson001'}; collection.find(whereStr).toArray(function(err, result) { if(err) { console.log('Error:'+ err); return; } callback(result); }); } MongoClient.connect(DB_CONN_STR, function(err, db) { console.log("連線成功!"); selectData(db, function(result) { console.log(result); db.close(); }); });
修改
示例原始碼
刪除
示例原始碼
呼叫儲存過程
示例原始碼
到此CRUD操作就完成,通過回撥函式的result引數進行判斷都可以進行業務邏輯的進一步組合!
寫在之後...
mongoose的可能用的比較多...
本文中很多地方我都還是習慣的用表、行等術語去描述,其實對NoSQL來說並不對,只是有助於習慣了關係型資料庫的開發人員來解;
文章中“表”本應該描述為“collection(集合)”;“行”應該描述為“文件(document)”,一個database中可以有多個collection,一個collection中又可以有多個document
文章中並沒有涉及認證的部分,大家自行去補一下,非常簡單,我文中也挺到了兩個預設資料庫中的“admin”資料庫
用CMD中使用mongo.exe操作時,插入中文遇一了問題,原因是MongoDB預設編輯是utf-8,而CMD是GBK,所以在CMD視窗中執行這個命令修改編輯即可:chcp 65001
注意mongodb嚴格區分大小寫,比如查詢 db.tb2.find({"name":"wilson0"})和 db.tb2.find({"Name":"wilson0"}) 並不是用的同一欄位做的條件;
主要參考資料:
MongoDB權威指南