本文不想文縐縐的去分析MongoDB內部的數據存儲結構,只是想單純的從用的方面給大家一些指導,也不能說是指導,也是我最近學習,并且從實戰中總結的。
啟動和停止MongoDB
相信很多人和我這個小白一樣,剛接觸MongoDB,連打開也不會。WTF,誰叫我們水呢,只能慢慢嘗試,慢慢踩踩坑。
在安裝完Mongo之后,MongoDB 默認存儲數據目錄為/data/db/ (或者 c:\data\db), 默認端口 27017,默認 HTTP 端28017。當然也可以通過修改參數來改變默認路徑。只需要修改位置參數dbpath 參數: mongod --dbpath=/data/db
。在安裝完MongoDB之后,命令行會出現啟動和配置Mongodb的一些參數。
這些指令包括通過 brew services start mongodb
在系統啟動的時候啟動mongo,通過執行mongod --config /usr/local/etc/mongod.conf
來立即啟動mongo,這是一種通過命令配置文件啟動db的方式。主要啟動的方式有以下3種,第三種還沒嘗試出來,提供方式,有興趣的朋友可以找來告訴我一下,十分感謝。
- 命令行方式
mongod --dbpath=/data/db
,可能需要權限加上(加上sudo就好了),打開在/data/db
上數據庫。 - 配置文件方式。
mongod -f /etc/mongodb.cnf
- Daemon 方式啟動,即關閉終端的時候也能進行訪問
mongod --dbpath=/data/db --fork
,會提示你用上-logpath
。
停止mongo只需要按住control+c
就可以停止,或者找到mongo進程,直接殺死就可以。
定義和設置mongo模型
MongoDB的邏輯結構是一種層次結構,主要由:文檔(document)、集合(collection)、數據庫(database)這三部分組成的。
- 文檔:是由鍵值對組成,相當于數據庫中的一行數據
- 集合: 多條記錄,數據庫中的表
- 數據庫: 多個集合
mogoose的使用
說了文章會在使用的角度來講mongodb,所以這里我們采用mogoose來定義mongo的模型。
模式為集合中文檔定義字段和字段類型。mongo支持以下幾種基本數據類型
- String
- Number
- Date
- Buffer
- Boolean
- Mixed
- ObjectId
- Array
no code no bibi,下面通過代碼給大家講解一下如何在Nodejs中簡單的使用Mongo。首先先定義模型
var mongoose = require('mongoose');
var schema = mongoose.schema;
var userSchema = new schema({
username:{type:String, unique:true},
password:String,
email:String,
color:String,
hased_password:String
});
然后綁定和建立數據庫的過程,下面的代碼用到了express-session
和contect-mongo
來建立持久性連接,即用戶可以通過cookie的方式來訪問網頁。
需要說明一個contect session簡單的講就是瀏覽器訪問服務器的過程。有時候,我們需要session的聲明周期要長一點,比如好多網站有個免密碼兩周內自動登錄的功能。基于這個需求,session必須尋找內存之外的存儲載體,數據庫能提供完美的解決方案。 mongodb數據庫,作為一個NoSQL數據庫,它的基礎數據對象時database-collection-document 對象模型非常直觀并易于理解, 針對node.js 也提供了豐富的驅動和API。 express框架提供了針對mongodb的中間件:connect-mongo,只需在掛載session的時候在options中傳入mongodb的參數即可,程序運行的時候,express app 會自動的替我們管理session的存儲,更新和刪除。 這樣不同的瀏覽器和ip訪問的時候就可以保存cookie了。
代碼如下
var expressSession = require('express-session');
var mongoStore = require('connect-mongo')({session: expressSession});
var mongoose = require('mongoose');
var conn = mongoose.connect('mongodb://localhost/myapp');
app.use(expressSession({
secret: 'SECRET',
cookie: {maxAge: 60*60*1000},
store: new mongoStore({
db: mongoose.connection.db,
collection: 'sessions'
})
}));
解釋一下上面的代碼吧:
- expressSession對應一次訪問連接,
- mongoStore將訪問的記錄存下來。
- 然后建立連接。
- 使用中間件,每次訪問都存到數據庫中去
假總結
最近在看JavaScript全棧的書籍,今天看到了點mongo,就簡單的總結了一下mongo的使用,隨著自己做的項目規模的提升,后續會詳細的介紹mongoDB,NodeJS,當然還有ReactJS和AngularJS的東西。
學習資料
mongoose的基本使用可以參考如下地址