mongoDB的經常使用語法

安裝:
到mongodb官網下載安裝包或者壓縮包:https://www.mongodb.com/download-center?jmp=nav
一、若是是msi包的話則點擊按步驟安裝,若是是壓縮包的話不用安裝;
二、配置環境變量:將mongodb的bin目錄配置到環境變量的path中,或者新建MONGODB_HOME再配置到path中;
三、新建文件夾做爲存放mongo的數據的地方,而後在dos窗口中執行:mongod --dbpath=E:/mongodbIndex (path後面跟要存放數據的文件夾路徑),執行完後發現文件夾下有了數據,此步驟同時表示啓動了服務端
四、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命令行狀態下執行,導入導出與數據備份和恢復類似
相關文章
相關標籤/搜索