本文不想文縐縐的去分析MongoDB內部的數(shù)據(jù)存儲結構,只是想單純的從用的方面給大家一些指導耽梅,也不能說是指導马绝,也是我最近學習祭埂,并且從實戰(zhàn)中總結的夜赵。
啟動和停止MongoDB
相信很多人和我這個小白一樣果录,剛接觸MongoDB悟民,連打開也不會诽嘉。WTF,誰叫我們水呢侠姑,只能慢慢嘗試创橄,慢慢踩踩坑。
在安裝完Mongo之后莽红,MongoDB 默認存儲數(shù)據(jù)目錄為/data/db/ (或者 c:\data\db), 默認端口 27017妥畏,默認 HTTP 端28017。當然也可以通過修改參數(shù)來改變默認路徑安吁。只需要修改位置參數(shù)dbpath 參數(shù): mongod --dbpath=/data/db
醉蚁。在安裝完MongoDB之后,命令行會出現(xiàn)啟動和配置Mongodb的一些參數(shù)鬼店。
這些指令包括通過 brew services start mongodb
在系統(tǒng)啟動的時候啟動mongo网棍,通過執(zhí)行mongod --config /usr/local/etc/mongod.conf
來立即啟動mongo,這是一種通過命令配置文件啟動db的方式。主要啟動的方式有以下3種,第三種還沒嘗試出來妇智,提供方式滥玷,有興趣的朋友可以找來告訴我一下,十分感謝巍棱。
- 命令行方式
mongod --dbpath=/data/db
,可能需要權限加上(加上sudo就好了)惑畴,打開在/data/db
上數(shù)據(jù)庫。 - 配置文件方式航徙。
mongod -f /etc/mongodb.cnf
- Daemon 方式啟動,即關閉終端的時候也能進行訪問
mongod --dbpath=/data/db --fork
如贷,會提示你用上-logpath
。
停止mongo只需要按住control+c
就可以停止到踏,或者找到mongo進程杠袱,直接殺死就可以。
定義和設置mongo模型
MongoDB的邏輯結構是一種層次結構窝稿,主要由:文檔(document)霞掺、集合(collection)、數(shù)據(jù)庫(database)這三部分組成的讹躯。
- 文檔:是由鍵值對組成,相當于數(shù)據(jù)庫中的一行數(shù)據(jù)
- 集合: 多條記錄缠劝,數(shù)據(jù)庫中的表
- 數(shù)據(jù)庫: 多個集合
mogoose的使用
說了文章會在使用的角度來講mongodb潮梯,所以這里我們采用mogoose來定義mongo的模型。
模式為集合中文檔定義字段和字段類型惨恭。mongo支持以下幾種基本數(shù)據(jù)類型
- 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
});
然后綁定和建立數(shù)據(jù)庫的過程,下面的代碼用到了express-session
和contect-mongo
來建立持久性連接脱羡,即用戶可以通過cookie的方式來訪問網(wǎng)頁萝究。
需要說明一個contect session簡單的講就是瀏覽器訪問服務器的過程免都。有時候,我們需要session的聲明周期要長一點帆竹,比如好多網(wǎng)站有個免密碼兩周內自動登錄的功能绕娘。基于這個需求,session必須尋找內存之外的存儲載體栽连,數(shù)據(jù)庫能提供完美的解決方案险领。 mongodb數(shù)據(jù)庫,作為一個NoSQL數(shù)據(jù)庫秒紧,它的基礎數(shù)據(jù)對象時database-collection-document 對象模型非常直觀并易于理解绢陌, 針對node.js 也提供了豐富的驅動和API。 express框架提供了針對mongodb的中間件:connect-mongo熔恢,只需在掛載session的時候在options中傳入mongodb的參數(shù)即可脐湾,程序運行的時候,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將訪問的記錄存下來凿菩。
- 然后建立連接机杜。
- 使用中間件,每次訪問都存到數(shù)據(jù)庫中去
假總結
最近在看JavaScript全棧的書籍衅谷,今天看到了點mongo椒拗,就簡單的總結了一下mongo的使用,隨著自己做的項目規(guī)模的提升获黔,后續(xù)會詳細的介紹mongoDB,NodeJS,當然還有ReactJS和AngularJS的東西蚀苛。
學習資料
mongoose的基本使用可以參考如下地址