MongoDB常用語法

安裝:

到mongodb官網下載安裝包或者壓縮包:https://www.mongodb.com/download-center?jmp=nav

1、如果是msi包的話則點擊按步驟安裝,如果是壓縮包的話不用安裝;

2、配置環境變量:將mongodb的bin目錄配置到環境變量的path中,或者新建MONGODB_HOME再配置到path中;

3、新建文件夾作爲存放mongo的數據的地方,然後在dos窗口中執行:mongod --dbpath=E:/mongodbIndex (path後面跟要存放數據的文件夾路徑),執行完後發現文件夾下有了數據,此步驟同時表示啓動了服務端

4、mongodb默認端口是27017,上面步驟mongod 命令是屬於啓動mongo服務端命令,啓動後不能關閉,否則mongo就關閉了導致鏈接時出現10061錯誤,所以要新開啓一個窗口執行:mongo localhost:27017,表示客戶端連接

注:mongodb可以不設賬號密碼,通過IP地址和端口直接鏈接

退出輸入:exit

在mongodb中基本的概念是文檔、集合、數據庫,下面介紹。

SQL術語/概念 MongoDB術語/概念 解釋/說明
database database 數據庫
table collection 數據庫表/集合
row document 數據記錄行/文檔
column field 數據字段/域
index index 索引
table joins   表連接,MongoDB不支持
primary key primary key 主鍵,MongoDB自動將_id字段設置爲主鍵

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

MongoDB的單個實例可以容納多個獨立的數據庫,每一個都有自己的集合和權限,不同的數據庫也放置在不同的文件中。

 

MongoDB中常用的幾種數據類型。

數據類型 描述
String 字符串。存儲數據常用的數據類型。在 MongoDB 中,UTF-8 編碼的字符串纔是合法的。
Integer 整型數值。用於存儲數值。根據你所採用的服務器,可分爲 32 位或 64 位。
Boolean 布爾值。用於存儲布爾值(真/假)。
Double 雙精度浮點值。用於存儲浮點值。
Min/Max keys 將一個值與 BSON(二進制的 JSON)元素的最低值和最高值相對比。
Arrays 用於將數組或列表或多個值存儲爲一個鍵。
Timestamp 時間戳。記錄文檔修改或添加的具體時間。
Object 用於內嵌文檔。
Null 用於創建空值。
Symbol 符號。該數據類型基本上等同於字符串類型,但不同的是,它一般用於採用特殊符號類型的語言。
Date 日期時間。用 UNIX 時間格式來存儲當前日期或時間。你可以指定自己的日期時間:創建 Date 對象,傳入年月日信息。
Object ID 對象 ID。用於創建文檔的 ID。
Binary Data 二進制數據。用於存儲二進制數據。
Code 代碼類型。用於在文檔中存儲 JavaScript 代碼。
Regular expression 正則表達式類型。用於存儲正則表達式。

 

mongodb語法

數據庫:

show dbs;//查看所有的數據庫

db;//查看當前窗口所在的數據庫

use 數據庫名;//如果數據庫不存在,則創建數據庫,否則切換到指定數據庫。

注:show dbs執行結果沒有看到test庫,但是db查看當前庫確是test庫,因爲test庫中剛開始沒有任何數據並且是在內存中的,有了數據後就會顯示出來了(其他新創建的數據庫也是如此)

db.dropDatabase();//刪除當前數據庫,默認爲 test,故要切換到某個數據庫下進行刪除

 

集合:

顯式創建集合:db.createCollection("collectionName");//創建一個名爲collectionName的集合,創建完成後會返回 {"ok",1} json串

隱式創建集合:db.collection2.insert({name:"xiaomu",age:20});//往collection2集合中添加數據來創建集合,如果集合不存在就自動創建集合,返回:WriteResult({"nInserted":1})

show collections;//查看集合

db.collection1.count();//統計集合collection1中的數據數量

db.collection1.drop();//刪除集合collection1

注:mongo中支持js,可通過js操作實現批零處理,如:for(var i=0;i<1000;i++){db.collection2.insert({name:"xiaomu"+i,age:20+i});}

固定集合

固定集合指的是事先創建而且大小固定的集合。

固定集合特性:固定集合很想環形隊列,如果空間不足,最早的文檔就會被刪除,爲新的文檔騰出空間。一般來說,固定集合適用於任何想要自動淘汰過期屬性的場景,沒有太多的操作限制.

db.createCollection("collectionName",{capped:true,size:10000,max:100});//size指定集合大小,單位爲KB,max指定文檔數量

當文檔數量上限時必須同時指定大小。淘汰機制只有在容量還沒滿時纔會依據數量來工作。要是容量滿了則會依據容量來工作。

 

查詢

 

固定條件查詢:

注:mongodb中每條數據都有一個id,用來唯一標識一條數據,id由mongo本身來維護

db.collection1.find();//查詢集合中所有的數據

db.collection1.find({age:7});//查詢年齡爲7的數據

db.collection1.find({age:7},{name:1});

//查詢年齡爲7的數據,只返回name字段數據;兩個大括號,前面的存查詢條件,後面的存返回條件,返回條件字段1表示true,表示此字段返回,如果name後面的1改爲0則表示不返回name字段,返回除name字段以外的其他字段

注意:如果設置返回字段有爲0的已經表示查詢所有除了某字段以外的所有字段就不能再設置某個字段爲1了,有語法衝突

db.collection1.find({age:7,name:"xiaomu"},{name:1,age:1});//查詢age爲7,name爲xiaomu的數據,返回name和age字段

注:多條件查詢此處是並列,但是如果多個條件都相同的話如{name:"xiaoli",name:"xioamu"}則會只查詢後一個條件的數據

db.collection1.find({},{age:1});//查詢所有的數據,返回age字段

db.collection1.findOne();//查詢集合的第一條數據

篩選查詢:

gt(greater than)大於;lt(less than)小於;gte(greater then equal)大於等於;lte(less than equal)小於等於;ne(not equal)不等於

db.collection1.find({age:{$gt:10}});//查詢age大於10的數據

包含

db.collection1.find({price:{$all:[1,2]}});//(包含。。並且包含。。)此處price是個數組,此方法查詢所有price包含1和2的數據

db.collection1.find({price:{$in:[1,2]}});//(包含。。或者包含。。)查詢price中含有1或者2的數據

db.collection1.find({price:{$nin:[1,2]}});//(不包含。。並且不包含。。)查詢price中不含有1並且不含有2的數據

db.collection1.find({$or:[{name:"xiaomu"},{price:{$in:[3]}}]});//(。。或者。。)查詢name爲xiaomu或者價格包含3的數據

db.collection1.find({$nor:[{name:"xiaomu"},{name:"xiaoli"}]});//(既不也不)查詢name不爲xiaomu或者name不爲xiaoli的數據

分頁:

db.collection1.find().skip(0).limit(10);//查詢從0條開始,查詢10條,skip()方法默認參數爲 0 ,表示跳過的條數

排序:

db.collection1.find().sort({age:1});//按照年齡升序排序,爲-1的話表示降序排序

存在

db.c2.find({hight:{$exists:1}});//查詢存在hight字段的數據

 

刪除:

db.collection1.remove({age:7,name:"xiaomu"});//刪除age爲7,name爲xiaomu的數據

 

更新

db.c3.update({age:12},{name:"xiaoxiao"});//本意爲將age爲12的數據中的name更新爲xiaoxiao,但是實際效果是隻是將age爲12的滿足條件數據的第一條整條數據覆蓋爲name:“xiaoxiao”

db.c3.update({age:15},{$set:{name:"xiaolili"}});//本意爲將age爲15的數據的name修改爲xiaolili,但是實際效果是隻修改了查詢到的第一條數據

db.c3.update({age:15},{$set:{name:"xiaolili"}},1,1);//將age爲15的數據的name修改爲xiaolili

總共4個參數,第四個參數表示有多條數據符合篩選條件的話是否全部更改,默認爲0只改第一條,改爲1後表示全部更改

第3個參數1表示如果沒有符合條件的記錄是否新增一條記錄,1表示新增,0表示不新增

如:db.c3.update({age:21},{$set:{name:"xiaolili"}},1,1);//如果不存在age爲21的數據則增加一條,增加的數據爲{age:12,name:”xiaolili”}

db.c3.update({age:12},{name:"xiaoxiao"},{$inc:{age:-2}},1,1);//$inc表示使某個鍵值加減指定的數值,此處表示將name爲xiaoxiao的數據的age字段的值減2

db.c3.update({age:12},{name:"xiaoxiao"},{$inc:{age:1}},0,1);//$unset用來刪除某個鍵,此處表示刪除name爲xiaoxiao的數據的age字段

 

索引

mongo默認爲每條數據的_id字段建索引

db.c3.ensureIndex({age:1});//爲age字段建普通索引

db.c3.dropIndex({age:1});//刪除age字段的索引

db.c3.ensureIndex({age:1},{unique:true});//爲age字段建唯一索引,在爲字段建了唯一索引後就不能再添加相同值的記錄了

 

數據備份與恢復

備份:mongodump -h dbhost -d dbname -o dbdirectory

-h:mongodb所在服務器地址,如127.0.0.1,當然也可以指定端口號:127.0.0.1:27017

-d:需要備份的數據庫實例,如:test

-o:需要備份的數據存放的位置,例如:d:\data (如果沒有則自動創建)

恢復:mongorestore -h dbhost -d dbname -directoryperdb dbdirectory

-h:mongodb所在服務器地址,如127.0.0.1,當然也可以指定端口號:127.0.0.1:27017

-d:需要備份的數據庫實例,如:test,此名稱也可以和備份的時候不一樣

-directoryperdb :備份數據所在的位置,例如:d:\data

注意:恢復時要在退出mongo命令行狀態下執行

 

導入與導出

導出:mongoexport -h dbhost -d dbname -c collectionName -o output

-h:數據庫地址

-d:指明使用的庫

-c:指明要導出的集合

-o:指明要導出的文件路徑加文件名,文件名可以是txt、word、excel等多種文件格式

導入:mongoimport -h dbhost -d dbname -c collectionname 文件的地址路徑

-h:數據庫地址

-d:指明使用的庫

-c:指明要導出的集合

注意:導入時要在退出mongo命令行狀態下執行,導入導出與數據備份和恢復相似

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章