MongoDB簡介基本命令(一)

1 MongoDB 簡介

1.1 使用場景

(1)數據量大
(2)價值較低
對於這樣的數據,更適合於使用MangoDB來存儲數據javascript

1.2 什麼是MangoDB

MangoDB是一個跨平臺的面向文檔(至關於Mysql中的一行記錄)的數據庫,是NoSql數據庫中最熱門的一種。它介於關係和非關係數據庫之間的,是非關係數據庫中功能最豐富,最像關係數據庫的產品,支持的數據很是鬆散,相似於JSON的BSON格式,所以能夠存儲比較複雜的數據類型
官網:[http://www.mangodb.org]java

1.3 MongoDB的特色

MongoDB最大的特色就是他支持的查詢語言很是強大,語法相似於面向對象的查詢語言,幾乎能夠實現相似關係數據庫單表查詢的絕大部分功能,並且還支持對數據庫簡歷索引。它是一個面向集合的,模式自由的文檔型數據庫。正則表達式

特色:sql

  1. 面向集合存儲,易於存儲對象類型的數據;
  2. 模式自由
  3. 支持動態查詢
  4. 支持徹底索引,包含內部對象
  5. 支持複製和故障恢復
  6. 使用高效的二進制數據存儲,包括大型對象 如視頻等
  7. 自動處理碎片,支持雲計算層次的擴展
  8. 支持Python、PHP、Ruby、Java、C、C#、Javascript、Prel等等
  9. 支持的格式BSON一種JSON的擴展

1.4 MongoDB體系結構

MangoDB的邏輯結構是一種層次結構主要由:mongodb

文檔(document)、集合(collection)、數據庫(database)這三部分組成。夥計結構是面向用戶的,用戶使用MangoDB開發應用程序就是使用的邏輯結構docker

  1. MangoDB的文檔(document),至關於關係數據庫中的一行
  2. 多個文檔組成一個集合(collection),至關於關係數據庫中的表
  3. 多個集合(collection),邏輯上組織在一塊兒,就是數據庫(database)
  4. 一個MangoDB支持多個數據庫(database)

1.5 數據類型

基本數據類型shell

null:用於表示空值或者不存在的字段{"x":null}數據庫

布爾型:布爾類型有兩個值true或者false {"x"true}json

數值:shell默認使用64位浮點型數值,{"x":3.14} 或 {"x":3.14}數組

​ 對於整型可使用NumberInt(4字節符號整數)或NumberLong(8字節符號整數)

​ {"x":NumberInt(4)}{"x":NumberLong(4)}

字符串:UTF-8字符串均可以表示字符串類型的數據{"x":"呵呵"}

日期:日期被存儲爲自新紀元依賴通過的毫秒數,不存儲時區,{"x":new Date()}

正則表達式:查詢時,使用正則表達式做爲限定條件,語法與JavaScript的正則表達式相同,{「x」😕[abc]/}

數組:數據列表或數據集能夠表示爲數組,{「x」: [「a「,「b」,」c」]}

內嵌文檔:文檔能夠嵌套其餘文檔,被嵌套的文檔做爲值來處理,{「x」:{「y」:3 }}

對象Id:對象id是一個12字節的字符串,是文檔的惟一標識,{「x」: objectId() }

二進制數據:二進制數據是一個任意字節的字符串。它不能直接在shell中使用。若是要將非utf-字符保存到數據庫中,二進制數據是惟一的方式。

代碼:查詢和文檔中能夠包括任何JavaScript代碼,{「x」:function(){/…/}}

2 走進MongoDB

2.1 MongoDB安裝與啓動

2.1.1 window系統MongoDB安裝

一直下一步

C:\Program Files\MongoDB\Server\3.2\bin 設置到環境變量path中

啓動
(1)首先打開命令提示符,建立一個用於存放數據的目錄 md d:\data
(2)啓動服務
mongod ‐‐dbpath=d:\data

--dbpath=指定數據文件路徑

咱們在啓動信息中能夠看到,mongoDB的默認端口是27017
若是咱們想改變默認的啓動端口,能夠經過--port來指定端口
在命令提示符輸入如下命令便可完成登錄
mongo
退出mongodb
exit

2.1.2 Docker 環境下MongoDB安裝

在宿主機建立mongo容器

docker run ‐di ‐‐name=tensquare_mongo ‐p 27017:27017 mongo

遠程登錄

mongo 192.168.184.134

遠程登錄mongo 192.168.184.134

2.2 經常使用命令

2.2.1 選擇和建立數據庫

選擇和建立數據庫的語法格式:

use 數據庫名稱

若是數據庫不存在則自動建立
如下語句建立spit數據庫

use spitdb

若是數據庫不存在則自動建立
如下語句建立spit數據庫

use spitdb

2.2.2 插入與查詢文檔

插入文檔的語法格式:

db.集合名稱.insert(數據);

咱們這裏能夠插入如下測試數據:

db.spit.insert({content:"哈哈",userid:"1011",nickname:"小
雅",visits:NumberInt(902)})

查詢集合的語法格式:

db.集合名稱.find()

若是咱們要查詢spit集合的全部文檔,咱們輸入如下命令

db.spit.find()

這裏你會發現每條文檔會有一個叫_id的字段,這個至關於咱們原來關係數據庫中表的主
鍵,當你在插入文檔記錄時沒有指定該字段,MongoDB會自動建立,其類型是ObjectID
類型。若是咱們在插入文檔記錄時指定該字段也能夠,其類型能夠是ObjectID類型,也
能夠是MongoDB支持的任意類型。
輸入如下測試語句:_

db.spit.insert({_id:"1",content:"我仍是沒有想明白到底爲啥出
錯",userid:"1012",nickname:"小明",visits:NumberInt(2020)});
db.spit.insert({_id:"2",content:"加班到半夜",userid:"1013",nickname:"凱
撒",visits:NumberInt(1023)});
db.spit.insert({_id:"3",content:"手機流量超了咋
辦?",userid:"1013",nickname:"凱撒",visits:NumberInt(111)});
db.spit.insert({_id:"4",content:"堅持就是勝利",userid:"1014",nickname:"諾
諾",visits:NumberInt(1223)});

若是我想按必定條件來查詢,好比我想查詢userid爲1013的記錄,怎麼辦?很簡單!只
要在find()中添加參數便可,參數也是json格式,以下:

db.spit.find({userid:'1013'})

若是你只須要返回符合條件的第一條數據,咱們可使用findOne命令來實現

db.spit.findOne({userid:'1013'})

若是你想返回指定條數的記錄,能夠在find方法後調用limit來返回結果,例如:

db.spit.find().limit(3)

2.2.3 修改與刪除文檔

修改文檔的語法結構:

db.集合名稱.update(條件,修改後的數據)

若是咱們想修改_id爲1的記錄,瀏覽量爲1000,輸入如下語句:

db.spit.update({_id:"1"},{visits:NumberInt(1000)})

執行後,咱們會發現,這條文檔除了visits字段其它字段都不見了,爲了解決這個問題,咱們須要使用修改器$set來實現,命令以下:
這樣就OK啦。

db.spit.update({_id:"2"},{$set:{visits:NumberInt(2000)}})

刪除文檔的語法結構:

db.集合名稱.remove(條件)

如下語句能夠將數據所有刪除,請慎用

db.spit.remove({})

若是刪除visits=1000的記錄,輸入如下語句

db.spit.remove({visits:1000})

2.2.4 統計條數

統計記錄條件使用count()方法。如下語句統計spit集合的記錄數

db.spit.count()

若是按條件統計 ,例如:統計userid爲1013的記錄條數

db.spit.count({userid:"1013"})

2.2.5 模糊查詢

MongoDB的模糊查詢是經過正則表達式的方式實現的。格式爲:

/模糊查詢字符串/

例如,我要查詢吐槽內容包含「流量」的全部文檔,代碼以下:

db.spit.find({content:/流量/})

若是要查詢吐槽內容中以「加班」開頭的,代碼以下:

db.spit.find({content:/^加班/})

2.2.6 大於 小於 不等於

db.集合名稱.find({ "field" : { $gt: value }}) // 大於: field > value
db.集合名稱.find({ "field" : { $lt: value }}) // 小於: field < value
db.集合名稱.find({ "field" : { $gte: value }}) // 大於等於: field >= value
db.集合名稱.find({ "field" : { $lte: value }}) // 小於等於: field <= value
db.集合名稱.find({ "field" : { $ne: value }}) // 不等於: field != value

2.2.7 包含與不包含

包含使用$in操做符。
示例:查詢吐槽集合中userid字段包含1013和1014的文檔

db.spit.find({userid:{$in:["1013","1014"]}})

不包含使用$nin操做符。
示例:查詢吐槽集合中userid字段不包含1013和1014的文檔

db.spit.find({userid:{$nin:["1013","1014"]}})

2.2.8 條件鏈接

咱們若是須要查詢同時知足兩個以上條件,須要使用$and操做符將條件進行關聯。(至關於SQL的and)

格式爲:

$and:[ {  },{  },{ } ]

示例:查詢吐槽集合中visits大於等於1000 而且小於2000的文檔

db.spit.find({$and:[ {visits:{$gte:1000}} ,{visits:{$lt:2000} }]})

若是兩個以上條件之間是或者的關係,咱們使用 操做符進行關聯,與前面 and的使用
方式相同
格式爲:

$or:[ {  },{  },{   } ]

示例:查詢吐槽集合中userid爲1013,或者瀏覽量小於2000的文檔記錄

db.spit.find({$or:[ {userid:"1013"} ,{visits:{$lt:2000} }]})

2.2.9 列值增加

若是咱們想實現對某列值在原有值的基礎上進行增長或減小,可使用$inc運算符來實現

db.spit.update({_id:"2"},{$inc:{visits:1}}  )
相關文章
相關標籤/搜索