MongoDB(一)-- 簡介、安裝、CRUD

1、Mongodb簡介

MongoDB 是由C++語言編寫的,是一個基於分佈式文件存儲的開源數據庫系統。java

在高負載的狀況下,添加更多的節點,能夠保證服務器性能。mongodb

MongoDB 旨在爲WEB應用提供可擴展的高性能數據存儲解決方案。數據庫

MongoDB 將數據存儲爲一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔相似於 JSON 對象。字段值能夠包含其餘文檔,數組及文檔數組。編程

2、主要特色

  • MongoDB的提供了一個面向文檔存儲,操做起來比較簡單和容易。
  • 你能夠在MongoDB記錄中設置任何屬性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")來實現更快的排序。
  • 你能夠經過本地或者網絡建立數據鏡像,這使得MongoDB有更強的擴展性。
  • 若是負載的增長(須要更多的存儲空間和更強的處理能力) ,它能夠分佈在計算機網絡中的其餘節點上這就是所謂的分片。
  • Mongo支持豐富的查詢表達式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內嵌的對象及數組。
  • MongoDb 使用update()命令能夠實現替換完成的文檔(數據)或者一些指定的數據字段 。
  • Mongodb中的Map/reduce主要是用來對數據進行批量處理和聚合操做。
  • Map和Reduce。Map函數調用emit(key,value)遍歷集合中全部的記錄,將key與value傳給Reduce函數進行處理。
  • Map函數和Reduce函數是使用Javascript編寫的,並能夠經過db.runCommand或mapreduce命令來執行MapReduce操做。
  • GridFS是MongoDB中的一個內置功能,能夠用於存放大量小文件。
  • MongoDB容許在服務端執行腳本,能夠用Javascript編寫某個函數,直接在服務端執行,也能夠把函數的定義存儲在服務端,下次直接調用便可。
  • MongoDB支持各類編程語言:RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。
  • MongoDB安裝簡單。

img

3、安裝

1.下載數組

根據本身Linux的版本下載對應的mongodb,下載地址:www.mongodb.com/download-ce…,下載到 /usr/java 路徑下。安全

2.建立數據庫文件路徑和數據庫日誌路徑bash

  1. 進入到java路徑下,cd /usr/java/服務器

  2. 建立mongodbNode文件夾,mkdir mongodbNode網絡

  3. 在mongodbNode下,建立data和log文件夾,其中data是存mongodb數據的文件夾,log是存mongodb日誌的文件夾數據結構

mkdir data log

  1. 進入data文件,在data下建立db文件夾,mongodb會將數據文件寫到db文件夾下,

mkdir db

3.啓動mongodb服務端,有兩種方式

  1. 命令行方式啓動(啓動方便),進入到bin目錄下(能夠經過 ./mongod --help 來查看 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

當看到如下信息的時候,則說明啓動成功:

img

固然,咱們也能夠經過查看後臺進程的方式 檢查mongodb是否啓動成功:netstat -anp|grep mongod

img

  1. 配置文件方式啓動(管理起來規範)

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

img

f. 啓動:mongod --config mongodb.conf

4.啓動mongodb客戶端

  • 命令行方式:./mongo --host 192.168.242.129 --port 27017
  • 配置文件方式:mongo --host 192.168.242.129 --port 27017

4、配置文件

# 日誌文件位置
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
複製代碼

5、數據庫

一個mongodb中能夠創建多個數據庫。

MongoDB的默認數據庫爲"db",該數據庫存儲在data目錄中。

MongoDB的單個實例能夠容納多個獨立的數據庫,每個都有本身的集合和權限,不一樣的數據庫也放置在不一樣的文件中。

"show dbs" 命令能夠顯示全部數據的列表。

運行"use"命令,能夠鏈接到一個指定的數據庫。

6、文檔

文檔是一個鍵值(key-value)對(即BSON)。MongoDB 的文檔不須要設置相同的字段,而且相同的字段不須要相同的數據類型,這與關係型數據庫有很大的區別,也是 MongoDB 很是突出的特色。

須要注意的是:

一、文檔中的鍵/值對是有序的。

二、文檔中的值不只能夠是在雙引號裏面的字符串,還能夠是其餘幾種數據類型(甚至能夠是整個嵌入的文檔)。

三、MongoDB區分類型和大小寫。

四、MongoDB的文檔不能有重複的鍵。

五、文檔的鍵是字符串。除了少數例外狀況,鍵可使用任意UTF-8字符。

7、集合

集合就是 MongoDB 文檔組,相似於 RDBMS (關係數據庫管理系統:Relational Database Management System)中的表格。

集合存在於數據庫中,集合沒有固定的結構,這意味着你在對集合能夠插入不一樣格式和類型的數據,但一般狀況下咱們插入集合的數據都會有必定的關聯性。

8、操做(CURD)

1.鏈接到客戶端

2.查看數據庫:show dbs

img

3.新建數據庫:use testXbq,此時,show dbs不會有剛剛新建的數據庫,當向數據庫中 新建鏈接時 或者 直接插入文檔 時,纔會出現 testXbq數據庫。

img

  1. 查看當前使用的數據庫: db.getName() 或者 db

  2. 顯示當前數據庫的信息:db.stats()

  3. 修復當前使用的數據庫:db.repairDatabase()

  4. 刪除當前使用的數據庫:db.dropDatabase()

  5. 從指定的機器上覆制指定數據庫數據到某個數據庫:db.copyDatabase("mydb", "temp", "127.0.0.1"); --將本機的mydb的數據複製到temp數據庫中

  6. 查看當前db的連接機器地址:db.getMongo()

  7. 當前db版本:db.version()

  8. 查看當前數據庫中的全部鏈接:show collections

4.插入文檔,向剛剛建立的鏈接中 插入文檔:db.xbqTable.insert({name:"xbq",sex:"男"}),也可使用 save方法

img

5.**查詢總的的文檔:**db.xbqTable.find() ,若想要 格式化查詢結果,在find()後面加上 .pretty() 便可,如:db.xbqTable.find().pretty()

img

6.更新文檔,修改剛剛插入的文檔:db.xbqTable.update({ "_id" : ObjectId("58e40c02aee532ffbea0b89d")},{$set:{name:"徐邦啓"}})

img

multi : 可選,mongodb 默認是false,只更新找到的第一條記錄,若是這個參數爲true,就把按條件查出來多條記錄所有更新。

從新插入幾條文檔:

img

更新name爲xbq的文檔,並將age更新爲 24,db.xbqTable.update({name:"xbq"},{$set:{age:24}},{multi:true})

img

7.刪除文檔,刪除name爲 徐邦啓的文檔:db.xbqTable.remove({name:"徐邦啓"})

img

8.and查詢,查詢 name 爲xbq,而且 address 爲 廣東深圳 的 文檔:db.xbqTable.find({name:"xbq",address:"廣東深圳"})

img

9.or查詢,查詢 name 爲joe 或者 name爲 java的文檔:db.xbqTable.find({$or:[{name:"joe"},{name:"java"}]})

img

10.<,<=,> ,>= ,<>

總文檔有:

img

  1. 查詢age < 15的文檔:db.xbqTable.find({age:{$lt:15}})

img

  1. **查詢age <= 15的文檔:**db.xbqTable.find({age:{$lte:15}})

img

  1. **查詢age>15的文檔:**db.xbqTable.find({age:{$gt:15}})

img

  1. **查詢年age>=15的文檔:**db.xbqTable.find({age:{$gte:15}})

img

  1. **查詢age != 15的文檔:**db.xbqTable.find({age:{$ne:15}})

img

11.**模糊查詢,查詢 name 中包含 o 的文檔:**db.xbqTable.find({name:/o/});

至關於 select * from xbqTable where name like '%o%';

img

12.**模糊查詢,查詢name中以 t 開頭的文檔:**db.xbqTable.find({name:/^t/})

至關於 select * from xbqTable where name like 't%';

img

13.**查詢指定列 name 和 sex 的數據:**db.xbqTable.find({},{name:1,sex:1}) 或者 db.xbqTable.find({},{name:true,sex:true})

至關於 select name,sex from xbqTable;

寫 0 或者 false ,則爲 排除此列,查詢 除了此列的 其餘數據

img

14.**查詢指定列 name 和 sex的數據,而且 age > 16 的文檔:**db.xbqTable.find({age:{$gt:16}},{name:1,sex:1})

img

15.查詢去重:db.xbqTable.distinct("sex")

至關於:select distinct(sex) from xbqTable;

img

16.按照age 排序

升序:db.xbqTable.find().sort({age:1})

    

img

降序:db.xbqTable.find().sort({age:-1})

img

17.查詢前2條的文檔:db.xbqTable.find().limit(2) 

img

18.查詢3條後的文檔(跳過前3條的文檔):db.xbqTable.find().skip(3)

img

19.查詢在2--4之間的文檔(即先跳過前2條,而後再查詢2條)(用於分頁查詢,limit是pageSize,skip是 第幾頁 * pageSize):

db.xbqTable.find().skip(2).limit(2)

img

20.**查詢第1條的文檔:**db.xbqTable.findOne() 或者 db.xbqTable.find().limit(1)

img

21.查詢 name 爲 xbq的文檔數目:db.xbqTable.find({name:"xbq"}).count();

img

22.分組

9、索引

索引一般可以極大的提升查詢的效率,若是沒有索引,MongoDB在讀取數據時必須掃描集合中的每一個文件並選取那些符合查詢條件的記錄。這種掃描全集合的查詢效率是很是低的,特別在處理大量的數據時,查詢能夠要花費幾十秒甚至幾分鐘,這對網站的性能是很是致命的。

索引是特殊的數據結構,索引存儲在一個易於遍歷讀取的數據集合中,索引是對數據庫表中一列或多列的值進行排序的一種結構。

建索引過程會阻塞其它數據庫操做,background可指定之後臺方式建立索引,即增長 "background" 可選參數。 "background" 默認值爲false。

例如:db.xbqTable.ensureIndex({name:1},{background:true}),意思是 在name字段上創建一個升序的索引。


歡迎關注個人公衆號,第一時間接收最新文章~ 搜索公衆號: 碼咖 或者 掃描下方二維碼:

img
相關文章
相關標籤/搜索