MongoDB數(shù)據(jù)庫的簡單操作

MongoDB的使用

MongoDB的搭建

  • 成功運行
  • 將mongoDB設置為windows服務
  • 將mongoDB的端口進行修改為8888

MongoDB的簡單理解

  • database 數(shù)據(jù)庫
  • collection(表)集合
  • document(記錄) 文檔
  • field (字段) 域
  • index 索引
  • 文檔化存儲,和json很像

MongoDB數(shù)據(jù)庫里的增刪改查操作

大致的脈絡如下:

  • 數(shù)據(jù)庫的增刪
  • 集合的增刪
  • 文檔的增刪改查

新建數(shù)據(jù)庫

use 加數(shù)據(jù)庫名 ,例如

use game

db   (可以用來查看當前的數(shù)據(jù)庫名稱)
注意:新建數(shù)據(jù)庫后,是不會直接顯示出來的,必須要等插入文檔(記錄)后
簡單插入用例:
db.game.insert({"name":"R","age":"22"})
特別注意:db后面的為collection(集合【表】),如果不存在,會自動新建一個集合,和db緊跟的參數(shù)一致的單詞名

查看所有數(shù)據(jù)庫

show dbs

刪除數(shù)據(jù)庫

進入要刪除數(shù)據(jù)庫文檔,再命令行中輸入

db.dropDatabase()
要刪除前后,可以show dbs 來進行對比
刪除之前,可以通過 db 命令來確認是否是要刪除的數(shù)據(jù)庫
例如:刪除db數(shù)據(jù)庫sg
use sg
db.dropDatabase()

擴展:刪除集合(表)

刪除記錄,首先應該要在該文檔數(shù)據(jù)庫的目錄下

例如:在數(shù)據(jù)庫ab下有一個集合 (表)sfa,需要刪除

use ab
db.sfa.drop()

創(chuàng)建集合(表)

db.createCollection(name,options)

options 包含四個參數(shù)

  • capped 設為true時,則集合為固定集合,且options必須同時包含size參數(shù)
  • autoIndexId 為自動索引_id字段
  • size 為固定集合設置內存大小
  • max 為固定集合設置文檔的最大數(shù)量 (若超過了文檔的最大數(shù)量則會進行覆蓋,從最早的文檔開始)

實例:在db fan下新建一個普通collection fans

use fan

db.createCollection("fans")

實例:在db fan 下新建一個size為8888,最大document為6666,且自動在id上建立索引的固定collection superFans

use fan

db.createCollection("superFans",{capped:true,autoIndexId:true,size:8888,max:6666})

特別注意:固定文檔是不能刪除的

插入文檔

db.collection_name.insert(document)

首先要選擇要進行插入記錄的表,即要正確選擇插入文檔的集合

文檔的格式有點像json一樣,插入文檔必須使用{}來進行,有兩種方式

第一種:直接在{}中進行編輯

例如:在數(shù)據(jù)庫ab下的集合fans中插入name為R,age為22的文檔

use ab

db.fans.insert({name:"R",age:22})

第二種:定義一個變量,然后再執(zhí)行插入這個變量

例如 在數(shù)據(jù)庫ab下的集合fans中插入name為W,age為22的文檔(記錄),注意,不需要{}了,只需要???()加入變量

use ab

w=({name:"W",age:22})

db.fans.insert(w)

擴展:插入多條文檔,也是用定義變量來書寫,但是必須要寫在[]里,文檔之間用,進行分割

例如:在fans 中插入name為 a,age為1,name為b,age為2的兩條文檔

var s=db.fans.insertMany([{name:"a",age:1},{name:"b",age:2}])

s

特別注意:insertOne和insertMany方法用變量來進行插入文檔,則必須在變量前加var,而且在書寫完成后再輸一次變量

查看集合中的文檔

db.collection_name.find()

例如:查看在集合fans中的所有文檔

db.fans.find()

更新集合中的文檔

有兩種方式來進行更新

第一種:使用 db.collcetion_name.update({query},{$set:{更新內容}},{可選})

解析:query為條件,相當于一般數(shù)據(jù)庫中的where

可選:

upsert:true時,假如不存在文檔,則插入該更新內容

multi:true時,符合更新條件,則多個文檔進行更新

writeConcern:拋出異常的級別

  • WriteConcern.NONE:沒有異常拋出
  • WriteConcern.NORMAL:僅拋出網(wǎng)絡錯誤異常,沒有服務器錯誤異常
  • WriteConcern.SAFE:拋出網(wǎng)絡錯誤異常、服務器錯誤異常;并等待服務器完成寫操作。
  • WriteConcern.MAJORITY: 拋出網(wǎng)絡錯誤異常、服務器錯誤異常;并等待一個主服務器完成寫操作。
  • WriteConcern.FSYNC_SAFE: 拋出網(wǎng)絡錯誤異常、服務器錯誤異常;寫操作等待服務器將數(shù)據(jù)刷新到磁盤。
  • WriteConcern.JOURNAL_SAFE:拋出網(wǎng)絡錯誤異常、服務器錯誤異常;寫操作等待服務器提交到磁盤的日志文件。
  • WriteConcern.REPLICAS_SAFE:拋出網(wǎng)絡錯誤異常、服務器錯誤異常;等待至少2臺服務器完成寫操作。

特別注意,該參數(shù)是沒有{}的,直接跟在第二{}后面,用,隔開

例如:在數(shù)據(jù)庫ab中的集合fans下更新name為w的文檔,需要更新其age為21

use ab

db.fans.update({name:"w"},{$set:{age:21}})

如果有多條文檔需要更新,如下
db.fans.update({name:"w:},{$set:{age:21}},{multi:true})

如果想拋出異常的級別
db.fans.update({name:"w:},{$set:{age:21}},WriteConcern.SAFE)

如果沒有這個文檔,想實現(xiàn)這個更新內容
db.fans.update({name:"w:},{$set:{age:21}},{update:true})

第二種:使用db.collection_name.save(更新【記錄】文檔),用新的文檔來替換原先的文檔

例如:在數(shù)據(jù)庫ab中的集合fans下更新name為w的文檔,需要更新其age為21

db.fans.save({name:"w"},{age:21})

更多實例:

{$gt :2} 表示大于2的數(shù)值

$inc:{age:2} 表示對一個數(shù)值字段(field)增加值

后面跟的兩個參數(shù) 為 upsert ,multi

只更新第一條記錄:

db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );

全部更新:

db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );

只添加第一條:

db.col.update( { "count" : { $gt: 4 } } , { $set : { "test5" : "OK"} },true,false );

全部添加加進去:

db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );

全部更新:

db.col.update( { "count" : {$gt: 15 } } , { $inc : { "count" : 1} },false,true );

只更新第一條記錄:

db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );

擴展:

更新文檔也可以不用multi來進行更新多條記錄

db.collection_name.updateMany()

例如:在db :ab 中 collection:fans ,更新所有age>22的文檔,設置df為sdf

db.fans.updateMany({"age":{$gt:22}},{$set:{df:"sdf"}})

更新單條記錄

db.collection_name.updateOne()

例如:在db:ab中collection:fans,更新name為sdf,設置age為22

db.fans.updateOne({name:"sdf"},{$set:{age:22}})

刪除文檔

db.collection_name.remove({query},{justOne:<boolen>},writeConcern)

注意沒有justOne修飾的話,則刪除符合條件的多條文檔(記錄)

特別注意:應該要刪除collection所有的數(shù)據(jù)時,應該使用db.collection_name.remove({})

例如在db:ab ,collection:fans ,刪除name:W的多條文檔

db.fans.remove({name:"W"})

例如在db:ab ,collection:fans ,刪除name:W的一條文檔
db.fans.remove({name:"W"},{justOne:true})

還有其他一種方式
db.fans.remove({name:"W"},1)

如果想輸出異常級別的話,可以這樣子添加
db.fans.remove({name:"W"},1,WriteConcern.NONE)
或者這樣
db.fans.remove({name:"W"},{justOne:true},WriteConcern.NONE)

擴展:

mongoDB在新版中有添加了這些刪除的方法,使用這些方法的好處是可以省略justOne的參數(shù)來刪除指定條數(shù)

db.collection_name.deleteOne()

例如:db:ab   collection:fans   刪除一條name:fa的文檔 并輸出異常級別為NONE

db.fans.delectOne({name:"fa"},WriteConcern.NONE) 

db.collection_name.deleteMany()

例如:db:ab   collection:fans   刪除多條name:ck的文檔 并輸出異常級別為NONE

db.fans.delectMany({name:"ck"},WriteConcern.NONE)

查找文檔(記錄)

db.collection_name.find(query,projection).qretty()

注意:projection包含兩種顯示方式

當字段為1時只返回該字段,其他字段不顯示,為inclusion模式 中譯:包含

當字段為0時不返回該字段,其他字段都顯示,為exclusion模式 中譯:排除

特別注意,要么都為1,要么都為0,不然會混淆

顯示錯誤:Projection cannot have a mix of inclusion and exclusion

.qretty()方法為格式化返回的所有文檔

query中的幾個符號

運算符 mongodb中的符號 例如
= : 年齡為1 {age:1}

   $gt     年齡>1             {age:{$gt:1}} 

= $gte 年齡>=1 {age:{$gte:1}}
< $lt 年齡<1 {age:{$lt:1}}
<= $lte 年齡<=1 {age:{$lte:1}}
!= $ne 年齡!=1 {age:{$ne:1}

特別注意:混合使用

例如:db:ab  collection:fans  對年齡>18,年齡<25進行查詢文檔

db.fans.find({age:{$gt:18,$lt:25}}).pretty()

query中的兩個關系 AND和OR

  關系        mongodb中使用                     例如                   
 and            ,            查詢年齡為1,名字為w  {name:"w",age:1}      
  or           $or      查詢年齡為1,或者名字為w  { $or:[ {name:"w"},{age:1} ] }

and和or一起使用 , $or 查詢年齡為1,或者名字為w,并且身高為100 {high:100,$or:[{name:"w"},{age:1}]}

特別注意:可以最好在查詢語句后面加上.pretty()方法

返回指定數(shù)據(jù)類型的文檔

mongoDB中的常用數(shù)據(jù)類型以及其數(shù)字

   數(shù)據(jù)類型          數(shù)字                      實例                  
  Double         1      返回書籍價格為double類型的文檔  {price:{$type:1}}
  String         2      返回書籍名為String類型的文檔{bookName:{$type:2}}
  Object         3                                           
  Array          4                                           

Binary data 5
Object id 7
Boolean 8 返回登錄狀態(tài)為Boolean類型的文檔{static:{$type:8}}
Date 9 返回時間為Date類型的文檔{time:{$type:9}}
Null 10 返回時間為Null類型的文檔{time:{$type:10}}
32-bit integer 16
Timestamp 17
64-bit integer 18

返回查詢文檔的條數(shù)使用 .limit()方法

db.collection_name.find(query,projection).pretty().limit(數(shù)字參數(shù))

或者

db.collection_name.find(query,projection).limit(數(shù)字參數(shù))

例如: db:ab collection:fans 查詢 age>20 返回2條文檔

db.fans.find({age:{$gt:20}}).pretty().limit(2)

擴展:

使用skip()方法 來跳過限定條數(shù)的返回結果條數(shù)

db.collection_name.find(query,projection).pretty().limit(條數(shù)).skip(條數(shù))

skip中默認參數(shù)為0

例如:db:ab   collection:fans 查詢age>20  返回2條文檔,跳過第1條返回結果,只顯示第2條

db.fans.find({age:{$gt:20}}).pretty().limit(2).skip

對查詢文檔指定域(字段)進行排序

db.collection_name.find(query,projection).pretty().sort({字段:1或-1})

解析:1為升序排列,-1為降序排列

在skip(),limit(),sort()三個方法放在一起時,順序為:

  1. sort()

  2. skip()

  3.  limit()
    

    例如:db:ab collection:fans 查詢age>=22,限制條數(shù)為5,跳過前2條返回結果,并按age進行升序排序

    db.fans.find({age:{$gte:22}}).pretty().sort({age:1}).skip(2).limit(5)

創(chuàng)建索引

db.collection_name.ensureIndex({字段:1或-1})

解析:以指定字段創(chuàng)建索引,1為升序排列,-1為降序排列

例如:db:ab  collection : fans  以name為指定字段升序排列

db.fans.ensureIndex({name:1})

擴展:

創(chuàng)建復合索引

db.collection_name.ensureIndex({字段1:1或-1,字段2:1或-1})

例如:db:ab  collection:fans   以name為指定字段升序排列,age為指定字段降序排列

db.fans.ensureIndex({name:1,age:-1})

ensureIndex接受可選參數(shù)

  參數(shù)          類型          描述                           實例                   

background boolean 在后臺進行索引創(chuàng)建 對name創(chuàng)建后臺升序索引db.fans.ensureIndex({name:1},{background:true})
unqiue boolean 創(chuàng)建索引是否為唯一 對name創(chuàng)建升序唯一索引db.fans.ensureIndex({name:1},{unqiue:true})
name String 對索引進行命名 對name創(chuàng)建降序名為AllName索引db.fans.ensureIndex({name:-1},{name:"AllName"})
dropDups boolean 在創(chuàng)建唯一索引時刪除重復記錄 對name創(chuàng)建刪除重復記錄唯一的降序索引db.fans.ensureIndex({name:-1},{unique:true},{dropDups:true})
sparse boolean 對不存在字段不創(chuàng)建索引 對name創(chuàng)建唯一的降序索引對不存在字段不創(chuàng)建(質只允許一個為空)db.fans.ensureIndex({name:-1},{unique:true},{sparse:true})

問題有待于解決:

mongoDB存儲文檔時是不是必須要有一個字符串,或者說是不是字段是否需要"",省略可不可以

mongoDB 中showtables 和 showcollections有沒有區(qū)別

db.fans.remove({name:"fa"},{{justOne:true},writeConcern.SAFE})正確嗎?或者說如何在remove中輸出異常級別?

這句話有錯,語法沒有錯誤,括號有錯,writeConcern應該在括號外,而且還有單詞拼寫錯誤,writeConcern應該首字母大寫,WriteConcern

正確輸出異常級別的語句:db.fans.remove({name:"fa"},{justOne:true},WriteConcern.SAFE)

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容