Mongodb基本命令總結


Mongodb是近年來很火的一個非關系型數據庫,不少企業都用來做部分業務模塊數據的擴展存儲,這里我

總結了一些Mongodb的基本使用,作為分享,也方便自己以后需要的時候查詢使用。

 

 

數據庫基本操作

1. 創建數據庫

use  databaseName

選擇一個數據庫,如果數據庫不存在就自動創建一個數據庫

只有向數據庫中插入數據時,數據庫才會被真實創建出來,而當數據庫中沒有數據時,use不會馬上創建數據庫,

這個特點有效減少了存儲空間的占用。

 

2. 查看數據庫

show dbs

mongodb中默認有以下幾個數據庫:

admin  存放用戶和權限

local   存放本地化數據(分布式部署)

config  存儲分片信息

 

3. 刪除數據庫

 db.dropDatabase()  

注意:mongodb中函數都用小駝峰命名

 

4. 創建集合

db.createCollection(collection_name)

 

5. 查看集合

show collections 或者 show tables

注意集合的命名規則:

1) 合法的utf-8字符串

2) 不能有’\0’

3) 不能以system開頭,因為是系統的保留前綴

4)不能和關鍵字重復

 

6. 刪除集合

db.collection_name.drop()

 

7. 集合重命名

db.collection_name.renameCollection(‘new_name’)

 

8. 獲取集合對象

db.getCollection(‘collection_name’)

等價於db.collection

 

 

 

集合中增加數據

1. insert方法插入數據

語法:

db.collection_name.insert({數據內容})

 當向一個集合中插入數據的時候,如果這個集合不存在則自動創建

 最近插入的數據文檔在數據庫的最上方顯示

 插入的數據域默認是字符串,如果在插入字段中不用雙引號,數據庫后台就會自動加上

 

同時插入多條文檔

db.collection_name.insert([{ }, { }, { }])

 

2. save方法插入文檔

db.collection_name.save()

save與insert的區別

如果加_id域,如果這個_id域的值已經存在,則會替換原有的文檔,而insert是不允許插入相同

的_id的

 

集合中刪除數據

MongoDB刪除數據的命令比較簡單,也沒有太多的變化

語法:

db.collection.remove(query ,justOne)

參數:

query與下文查詢操作的query相同,justone表示只是刪除匹配到的多條文檔中的第一條文檔

 

集合查詢操作

1. 查詢文檔(重點)

語法:

db.collection_name.find(query,field)

相當於 mysql中的 select * 

query 篩選條件,相當於MySQL的where子句

field  選擇要展示的域

返回值: 返回查找到的文檔

需要理解的點:

query 和 field都是可選參數,不寫參數就默認顯示所有文檔,也只有查找時不用傳入query,一般其他操作都需要傳入query進行篩選

query  以鍵值對的形式給出查找條件

field   以鍵值對的形式給出要展示或者不展示的 域為鍵,值時0時不顯示該域, 值是1時顯示該域,這是mongodb特有的特性

例如:為了避免看到一大串的id值,在查找時_id 域經常會被設置為0

 db.class.find( {},{_id :0} )  除了_id 域,其他域都正常顯示

注意:

1. 在寫第二個參數時必須要寫第一個參數

2. 第二個參數只能同時限制多個域的0/1值,不能多個域都設置不同,否則其他沒設置的域會混亂,_id域的設置除外(即無論_id域怎么設

置都不影響其他域的設置)

 

好了,重點中的重點來了

query的使用

因為鍵值對無法進行像MySQL中where子句那樣強大的篩選作用(鍵值對篩選相當於MySQL中where子句篩選的等於條件),mongodb引入了操作符操作符的表達形式是以鍵值對形式出現的。下面介紹幾種常用的操作符,更多的操作符可以查看Mongodb的官方文檔。

1)比較操作符

$eq  等於操作符

例如:db.class.find( {age: {$eq : 18} },{_id :0} )

更多操作符:

    $gt   大於操作符 

    $lt   大於操作符

    $ lte  小於等於操作符

   $gte  大於等於操作符

   $ne   不等於操作符

 細節:mongodb中多種類型的數據都是可以比較的,例如數值類型,字符串類型

 

2)范圍操作符

$ in [ ]   在范圍集合內的文檔被匹配 (連續的范圍)

例如:db.class.find( {age: {$in : [18, 23]} },{_id :0} )

如果是用 $ and只能這樣表達: $and:[{age:{$gt:.. } }, {age:{$lt:.. } } ]

用gt和lt一起用來把范圍括起來

 $ nin[ ]  不在范圍集合內的文檔被匹配

 

3)邏輯操作符

1. $ and: [ ]   和運算符

query 中如果多個條件用逗號隔開,就為and關系(類似mysql中的where子句中的and)

例如:db.class.find( {$and: [{age: {$ gt 17}, {age: {$ lt 22} ],{_id :0} )  查詢年齡大於17,小於22的同學

 

用$ and 可以改寫為 db.class.find({$ and : [{ age: 17} ,{sex: ‘M’ } ] },{_id :0} )

[ ]內一定要分成連個字典來表示兩個條件,否則(只用一個字典來包含兩個條件並用逗號分隔)在語法上就只表示一個條件,只不過這個條件里面包含兩個條件而已

一般平常使用多直接用逗號來分隔條件而不用 $and的操作符

 

2 .$ or  或運算符

語法表達上跟 $ and 一樣,表達的是或邏輯篩選

 

1. $not  取反運算符

db.class.find( {age: {$not {$ gt 17} } },{_id :0} )  匹配年齡小於等於17的文檔

注意: $not 一般添加在條件值的前面,對值進行取反

 

2. $ nor  既不也不運算符

not(A or B) --> not A and not B

db.class.find({$ nor : [{ age: 17} ,{sex: ‘M’ } ] },{_id :0} )

 注意:如果篩選匹配的文檔的域是其他文檔不具備的;即一個域有些文檔有值,有些文檔沒值,這種篩選是無法匹配的

 

2. 查詢操作的另一條語法

findOne(query,field)

查找符合條件的第一條文檔

參數跟find一樣

 

 

集合的更新操作

1. 修改文檔內容操作

語法:

db.collection.update(query,update,upsert,multi)

與mysql不同,mongodb所有修改操作都用update,包括對集合的域值的修改和集合結構的修改

參數:query     篩選要修改的文檔,相當於where

     update    將篩選的文檔修改為什么內容,相當於set,需要配合修改操作符一起使用

     upsert     布爾值,默認為false,如果query文檔不存在則不進行修改  ,如果為true,在文檔不存在條件下,則根據query和update插入新文檔

     multi       布爾值,默認為false如果query篩選的為多條,則只修改第一條,如果設置為true,則修改所有符合條件文檔

 注意:

upset 一般為用默認值false,因為如果原本沒匹配的文檔,很有可能是程序員自己輸錯了某些內容

 

修改操作符:

$ set

如果沒有該文檔,需要插入的時候是根據查詢條件和設置條件作為域來插入的

如果需要修改的值為多個,就像插入數據一樣,將不同域的值用一個{ }包起來,例如:

db.class.update({name:'小張'},{$set:{age:16,sex:'m'}},true)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM