1. 程式人生 > >mongodb中基本語法

mongodb中基本語法

在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();//查詢集合中所有的資料,如果想要格式化的話加入pretty()

db.collection1.find({age:7});//查詢年齡為7的資料

查詢子文件

db.user.find({'class.name':'baidu'})

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.user.drop()刪除集合

show collections展示集合

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:{class.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命令列狀態下執行,匯入匯出與資料備份和恢復相似