MongoDB 是由C++語言編寫的,是一個基於分佈式文件存儲的開源數據庫系統。java
在高負載的狀況下,添加更多的節點,能夠保證服務器性能。mongodb
MongoDB 旨在爲WEB應用提供可擴展的高性能數據存儲解決方案。數據庫
MongoDB 將數據存儲爲一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔相似於 JSON 對象。字段值能夠包含其餘文檔,數組及文檔數組。編程
1.下載數組
根據本身Linux的版本下載對應的mongodb,下載地址:www.mongodb.com/download-ce…,下載到 /usr/java 路徑下。安全
2.建立數據庫文件路徑和數據庫日誌路徑bash
進入到java路徑下,cd /usr/java/
服務器
建立mongodbNode文件夾,mkdir mongodbNode
網絡
在mongodbNode下,建立data和log文件夾,其中data是存mongodb數據的文件夾,log是存mongodb日誌的文件夾數據結構
mkdir data log
mkdir db
3.啓動mongodb服務端,有兩種方式
./mongod --dbpath /usr/java/mongoNode/data/db --logpath /usr/java/mongoNode/log/mongodb.log --fork --bind_ip 192.168.242.129 --port 27017 --journal
當看到如下信息的時候,則說明啓動成功:
固然,咱們也能夠經過查看後臺進程的方式 檢查mongodb是否啓動成功:netstat -anp|grep mongod
a. 在cd /usr/java/mongoNode 下新建一個文件:touch mongodb.conf
b. 編輯文件,vi mongodb.conf
c. 在mongodb.conf中添加以下內容:
dbpath=/usr/java/mongoNode/data/db
logpath=/usr/java/mongoNode/log/mongodb.log
logappend=true
fork=true
bind_ip=192.168.242.129
port=27017
複製代碼
d. 將mongodb設置成環境變量:export PATH=/usr/java/mongodb/bin:$PATH
e. 查看環境變量是否生效:echo $PATH
f. 啓動:mongod --config mongodb.conf
4.啓動mongodb客戶端
# 日誌文件位置
logpath=/var/log/mongo/mongod.log
# 以追加方式寫入日誌
logappend=true
# 是否以守護進程方式運行
fork = true
# 默認27017
#port = 27017
# 數據庫文件位置
dbpath=/var/lib/mongo
# 啓用按期記錄CPU利用率和 I/O 等待
#cpu = true
# 是否以安全認證方式運行,默認是不認證的非安全方式
#noauth = true
#auth = true
# 詳細記錄輸出
#verbose = true
# Inspect all client data for validity on receipt (useful for
# developing drivers)用於開發驅動程序時驗證客戶端請求
#objcheck = true
# Enable db quota management
# 啓用數據庫配額管理
#quota = true
# 設置oplog記錄等級
# Set oplogging level where n is
# 0=off (default)
# 1=W
# 2=R
# 3=both
# 7=W+some reads
#diaglog=0
# Diagnostic/debugging option 動態調試項
#nocursors = true
# Ignore query hints 忽略查詢提示
#nohints = true
# 禁用http界面,默認爲localhost:28017
#nohttpinterface = true
# 關閉服務器端腳本,這將極大的限制功能
# Turns off server-side scripting. This will result in greatly limited
# functionality
#noscripting = true
# 關閉掃描表,任何查詢將會是掃描失敗
# Turns off table scans. Any query that would do a table scan fails.
#notablescan = true
# 關閉數據文件預分配
# Disable data file preallocation.
#noprealloc = true
# 爲新數據庫指定.ns文件的大小,單位:MB
# Specify .ns file size for new databases.
# nssize =
# Replication Options 複製選項
# in replicated mongo databases, specify the replica set name here
#replSet=setname
# maximum size in megabytes for replication operation log
#oplogSize=1024
# path to a key file storing authentication info for connections
# between replica set members
#指定存儲身份驗證信息的密鑰文件的路徑
#keyFile=/path/to/keyfile
複製代碼
一個mongodb中能夠創建多個數據庫。
MongoDB的默認數據庫爲"db",該數據庫存儲在data目錄中。
MongoDB的單個實例能夠容納多個獨立的數據庫,每個都有本身的集合和權限,不一樣的數據庫也放置在不一樣的文件中。
"show dbs" 命令能夠顯示全部數據的列表。
運行"use"命令,能夠鏈接到一個指定的數據庫。
文檔是一個鍵值(key-value)對(即BSON)。MongoDB 的文檔不須要設置相同的字段,而且相同的字段不須要相同的數據類型,這與關係型數據庫有很大的區別,也是 MongoDB 很是突出的特色。
須要注意的是:
一、文檔中的鍵/值對是有序的。
二、文檔中的值不只能夠是在雙引號裏面的字符串,還能夠是其餘幾種數據類型(甚至能夠是整個嵌入的文檔)。
三、MongoDB區分類型和大小寫。
四、MongoDB的文檔不能有重複的鍵。
五、文檔的鍵是字符串。除了少數例外狀況,鍵可使用任意UTF-8字符。
集合就是 MongoDB 文檔組,相似於 RDBMS (關係數據庫管理系統:Relational Database Management System)中的表格。
集合存在於數據庫中,集合沒有固定的結構,這意味着你在對集合能夠插入不一樣格式和類型的數據,但一般狀況下咱們插入集合的數據都會有必定的關聯性。
1.鏈接到客戶端
2.查看數據庫:show dbs
3.新建數據庫:use testXbq,此時,show dbs不會有剛剛新建的數據庫,當向數據庫中 新建鏈接時 或者 直接插入文檔 時,纔會出現 testXbq數據庫。
查看當前使用的數據庫: db.getName() 或者 db
顯示當前數據庫的信息:db.stats()
修復當前使用的數據庫:db.repairDatabase()
刪除當前使用的數據庫:db.dropDatabase()
從指定的機器上覆制指定數據庫數據到某個數據庫:db.copyDatabase("mydb", "temp", "127.0.0.1"); --將本機的mydb的數據複製到temp數據庫中
查看當前db的連接機器地址:db.getMongo()
當前db版本:db.version()
查看當前數據庫中的全部鏈接:show collections
4.插入文檔,向剛剛建立的鏈接中 插入文檔:db.xbqTable.insert({name:"xbq",sex:"男"}),也可使用 save方法
5.**查詢總的的文檔:**db.xbqTable.find() ,若想要 格式化查詢結果,在find()後面加上 .pretty() 便可,如:db.xbqTable.find().pretty()
6.更新文檔,修改剛剛插入的文檔:db.xbqTable.update({ "_id" : ObjectId("58e40c02aee532ffbea0b89d")},{$set:{name:"徐邦啓"}})
multi : 可選,mongodb 默認是false,只更新找到的第一條記錄,若是這個參數爲true,就把按條件查出來多條記錄所有更新。
從新插入幾條文檔:
更新name爲xbq的文檔,並將age更新爲 24,db.xbqTable.update({name:"xbq"},{$set:{age:24}},{multi:true})
7.刪除文檔,刪除name爲 徐邦啓的文檔:db.xbqTable.remove({name:"徐邦啓"})
8.and查詢,查詢 name 爲xbq,而且 address 爲 廣東深圳 的 文檔:db.xbqTable.find({name:"xbq",address:"廣東深圳"})
9.or查詢,查詢 name 爲joe 或者 name爲 java的文檔:db.xbqTable.find({$or:[{name:"joe"},{name:"java"}]})
10.<,<=,> ,>= ,<>
總文檔有:
11.**模糊查詢,查詢 name 中包含 o 的文檔:**db.xbqTable.find({name:/o/});
至關於 select * from xbqTable where name like '%o%';
12.**模糊查詢,查詢name中以 t 開頭的文檔:**db.xbqTable.find({name:/^t/})
至關於 select * from xbqTable where name like 't%';
13.**查詢指定列 name 和 sex 的數據:**db.xbqTable.find({},{name:1,sex:1}) 或者 db.xbqTable.find({},{name:true,sex:true})
至關於 select name,sex from xbqTable;
寫 0 或者 false ,則爲 排除此列,查詢 除了此列的 其餘數據
14.**查詢指定列 name 和 sex的數據,而且 age > 16 的文檔:**db.xbqTable.find({age:{$gt:16}},{name:1,sex:1})
15.查詢去重:db.xbqTable.distinct("sex")
至關於:select distinct(sex) from xbqTable;
16.按照age 排序:
升序:db.xbqTable.find().sort({age:1})
降序:db.xbqTable.find().sort({age:-1})
17.查詢前2條的文檔:db.xbqTable.find().limit(2)
18.查詢3條後的文檔(跳過前3條的文檔):db.xbqTable.find().skip(3)
19.查詢在2--4之間的文檔(即先跳過前2條,而後再查詢2條)(用於分頁查詢,limit是pageSize,skip是 第幾頁 * pageSize):
db.xbqTable.find().skip(2).limit(2)
20.**查詢第1條的文檔:**db.xbqTable.findOne() 或者 db.xbqTable.find().limit(1)
21.查詢 name 爲 xbq的文檔數目:db.xbqTable.find({name:"xbq"}).count();
22.分組
索引一般可以極大的提升查詢的效率,若是沒有索引,MongoDB在讀取數據時必須掃描集合中的每一個文件並選取那些符合查詢條件的記錄。這種掃描全集合的查詢效率是很是低的,特別在處理大量的數據時,查詢能夠要花費幾十秒甚至幾分鐘,這對網站的性能是很是致命的。
索引是特殊的數據結構,索引存儲在一個易於遍歷讀取的數據集合中,索引是對數據庫表中一列或多列的值進行排序的一種結構。
建索引過程會阻塞其它數據庫操做,background可指定之後臺方式建立索引,即增長 "background" 可選參數。 "background" 默認值爲false。
例如:db.xbqTable.ensureIndex({name:1},{background:true}),意思是 在name字段上創建一個升序的索引。