一、什麼是MongoDB? MongoDB 是一個基於分散式文件存儲的資料庫。 MongoDB 是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富,最像關係資料庫的。 MongoDB 將數據存儲為一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔類似 ...
一、什麼是MongoDB?
MongoDB 是一個基於分散式文件存儲的資料庫。
MongoDB 是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富,最像關係資料庫的。
MongoDB 將數據存儲為一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔類似於 JSON 對象。欄位值可以包含其他文檔,數組及文檔數組。
二、名詞解析
1、database 資料庫
2、collection 數據表/集合
3、document 數據記錄行/文檔
4、field 欄位/域
5、index 索引
6、primary key 主鍵(自動將_id欄位設置為主鍵)
三、什麼是文檔
MongoDB 的文檔,就相當於sql的數據表。文檔是一組鍵值(key-value)對(即BSON)。
MongoDB 的文檔不需要設置相同的欄位,並且相同的欄位不需要相同的數據類型,這與關係型資料庫有很大的區別,也是 MongoDB 非常突出的特點。
一個簡單的文檔例子如下:
{"name":"菜鳥教程","site":"www.runoob.com","create_time":"2017-12-13"}
其實文檔的鍵,就相當於表中的欄位,文檔的鍵不能重覆。鍵的命名不能為空字元,不能使用含有特別意義的符號。一般遵循資料庫設計的規範吧,全是英文,用下劃線隔開。
文檔的鍵值對是有序的。文檔中的值可以不是字元串(甚至可以是整個嵌入的文檔)。MongoDB區分類型和大小寫。
四、MongoDB的語法
1、資料庫:
① use DATABASE_NAME; -- 如果資料庫不存在,則創建資料庫,否則切換到指定資料庫。
② db.dropDatabase() --刪除當前資料庫
2、數據表/集合:
① db.createCollection(name,option) -- 創建集合(集合名稱,option是一個文檔,指定有關記憶體大小和索引),option可選
② db.COLLECTION_NAME.drop() -- 刪除集合
3、文檔
① db.COLLECTION_NAME.insert(document) -- 插入文檔
② db.collection.update(query,update,{upsert:boolean,mutli:boolean,writeConcern:document}) -- 更新文檔(該值)
db.collection.save({_id:ObjectId(),……}) --更新文檔(覆蓋,替換掉整個文檔)
③ db.collection.remove(query,{justOne:boolean,writeConcern:document}) -- 刪除文檔
④ db.collection.find(document).pretty() -- 查詢數據(.pretty()可選,以格式化的方式顯示結果)
db.collection.findOne(document) -- 查詢數據(只返回第一個文檔)
參數說明:
query:查詢條件,找到需要更新的數據,可以理解為sql中的where
update:update的對象和一些更新的操作符(如$,$inc...)等,可以理解為sql中update中的set
upsert:可選,預設為false,為true時表示 如果不存在則插入數據
multi:可選,預設為false,只更新找到的第一條記錄,為true時,則更新找到的全部記錄(意思就是批量更新)
justOne:可選,如果為true或1,則只刪除一個文檔
writeConcern:可選,拋出異常的級別
五、操作符
1、條件操作符
① $gt -- 大於
② $lt -- 小於
③ $gte -- 大於等於
④ $lte -- 小於等於
⑤ $eq -- 等於
⑥ $ne -- 不等於
⑦ $exist -- 存在
⑧ $type -- 數據類型
⑨ $mod -- 取餘
⑩ $regex -- 正則表達式
2、邏輯操作符
① $or -- 或
② $and -- 與
③ $not -- 非
④ $nor -- 都非
3、數組操作符
① $all -- 數組欄位中包含所有指定元素
② $elemMatch -- 內嵌文檔或數組中的部分欄位(field)
③ $size -- 數組長度
④ $slice -- 數組切片*(分頁)
4、更新操作符
① $inc -- 某個欄位值自增/減某個數字
② $mul -- 某個欄位值乘以某個數字
③ $rename -- 重命名某個欄位名
④ $set -- 更新某個欄位值
⑤ $unset -- 刪除某欄位,若欄位不存在則不操作
⑥ $min -- 比較,若某欄位值大於指定值則更新,設置最小值
⑦ $max -- 比較,若某欄位值小於指定值則更新,設置最大值
⑧ $eurrentDate -- 設置指定欄位為當前時間
⑨ $addToSet -- 添加一個元素到數組中
⑩ $pop -- 刪除數組中的第一個或最後一個元素,-1表示第一個,1表示最後一個
⑪ $pullAll -- 刪除數組或內嵌文檔欄位中所有指定的元素
⑫ $pull -- 刪除滿足條件的元素
⑬ $pushAll -- 棄用,等同於$push和$each連用
⑭ $push -- 更新某個欄位值
⑮ $each -- 配合$push或$addToSet使用
⑯ $sort -- 配合$push使用,表示給文檔中的指定數組元素排序,1是升序,-1是降序
⑰ $position -- 配合$push使用表示往數組元素中的指定位置插入元素
六、實例
1 // 不存在則創建資料庫test 2 use test; 3 // 創建集合(表) 4 db.createCollection('student',{capped:true,size:100000}); 5 // 插入文檔 6 db.student.insert({"id":1,"code":"2017001","name":"xiaoming","age":18}); 7 db.student.insert({"id":2,"code":"2017002","name":"小紅","age":19}); 8 // 插入多個文檔 9 db.student.insert({"id":3,"code":"2017003","name":"小強","age":20},{"id":4,"code":"2017004","name":"小剛","age":20}); 10 // 更新文檔 11 // 名字寫錯了,更新名字(某欄位)的值,只更新第一條記錄 12 db.student.update({"id":1},{$set:{"name":"小明"}}); 13 // 批量更改 14 db.student.update({"age":20},{$set:{"age":21}},{mutli:true}); 15 // 小剛過生日了,年齡加1 16 db.student.update({"name":"小剛"},{$inc:{"age":1}}); 17 // save的更新操作:如果集合內已經存在 一個和obj相同的id記錄,剛替換,不存在剛插入obj 18 db.student.save({"id":2,"code":"2017002","name":"大紅","age":25}); 19 //將返回集合中所有文檔 20 db.student.find({}); //db.student.find(); 21 // 查詢年齡大於19的學生 22 db.sudent.find({"age":{$gt:19}}); 23 // 查詢小強的學號,_id總是被返回,設置為0移除掉 24 db.student.findOne({"name":"小強"},{"code":1,"_id":0}); 25 // 查詢名字都是小強且年齡大於等於20歲的同學 26 db.student.find({$and:[{"name":"小強"},{"age":{$gte:20}]}); // 等同於: db.sudent.find({"name":"小強","age":{$gte:20}}); 27 // 清空集合student的文檔 28 db.student.remove({});//db.student.remove();
七、參考鏈接
http://www.runoob.com/mongodb/mongodb-tutorial.html
http://chenzhou123520.iteye.com/blog/1637629
http://blog.csdn.net/qq_16313365/article/details/58599253