mongodb操作重點

基礎命令

  • 查看當前的數據庫:db
  • 查看所有的數據庫:show dbs /show databases
  • 切換數據庫:use db_name
  • 刪除當前的數據庫:db.dropDatabase()

關於集合的基礎命令

  • 不手動創建集合:向不存在的集合中第一次加入數據時,集合會被創建出來
  • 手動創建
    db.createCollection(name,options)
    db.createCollection("stu")
    db.createCollection("sub",{capped:true,size:10})
    參數capped:默認值爲false表示不設置上限,值爲true表示設置上限
    參數size:當capped值爲true時,需要指定此參數,表示上限大小,當
    文件達到上限時,會將之前的數據覆蓋,單位爲字節
    
  • 查看集合:show collections
  • 刪除集合:db.集合名字.drop()

數據類型

  • Object ID:文檔ID
  • String:字符串,最常用,必須是有效的UTF-8
  • Boolean:存儲一個布爾值,true或者false
  • Integer:整數可以是32位或者64位,這取決於服務器
  • Double:存儲浮點型
  • Arrays:數組或者列表,多個值存儲到一個鍵
  • Object:用於嵌入式文檔,及一個值爲一個文檔
  • Null:存儲Null值
  • Timestamp:時間戳,表示從1970-1-1到現在的總秒數
  • Date:存儲當前日期或者UNIX時間格式

插入

  • db.集合名稱.insert(document)
  • db.stu.insert({name:"test",age:10})
  • db.stu.insert({_id:"202007131742",name:"de",age:1)
  • 插入文檔時,如果不指定_id參數,MongoDB會爲文檔分配一個唯一的ObjectId

保存

  • db.集合名稱.save(document)
  • 如果文檔的_id已經存在則修改,如果文檔的_id不存在則添加

更新

  • db.集合名稱.update(<query>,<update>,{<multi:<boolean>>})
    	db.stu.update({name:"hr"},{name:"mmp"})  更新一條(替換,其他屬性會缺失)
    	db.stu.update({name:"hr"},{$set:{name:"mmp"}})  更新一條
    	db.stu.update({},{$set:{age:10}},{multi:true})  更新全部
    
    • query:查詢條件
    • update:更新操作符
    • multi:可選,默認時false,表示只更新找到的第一條記錄,true表示把滿足條件的文檔全部更新

刪除

  • db.集合名稱.remove(<query>,{justOne:<boolean>})
    • query:可選,刪除的文檔的條件
    • justOne:可選,默認時false,表示刪除多條,設置爲true或1,則只刪除一條

查詢

  • 方法find():查詢-->db.集合名稱.find({查詢條件})
  • 方法 findOne():查詢,只返回第一條-->db.集合名稱.findOne({查詢條件})
  • 方法 pretty():將結果格式化-->db.集合名稱.find({查詢條件}).pretty()

比較運算符

  • 等於:默認是等於判斷,沒有運算符
  • 小於:$lt(less than)
  • 小於等於:$lte(less than equal)
  • 大於:$gt(greater than)
  • 大於等於:$gte(greater than equal)
  • 不等於:$ne(no equal)
  • db.stu.find({age:{$lte:10}})

範圍運算符

  • 在某個範圍:$in
  • 不在某個範圍:$nin
  • db.stu.find({age:{$in:[18,28,38]}})

邏輯運算符

  • and:在json中寫多個條件即可
  • or:使用$or,值爲數組,數組中每個元素爲json
  • 年齡大於等於18,且性別爲true:db.stu.find({age:{$gte:18},gender:true})
  • 年齡大於18,或性別爲false:db.stu.find({$or:[age:{$gte:18},gender:false]})
  • 年齡大於18,或性別爲false,且名字時"test":db.stu.find({$or:[age:{$gte:18},gender:false],name:"test"})

正則

  • 使用//或者$regex編寫正則表達式
  • 以abc開頭的:db.stu.find({sku:/^abc/})
  • 以123結尾的:db.stu.find({sku:{$regex:"123$"}})

limit和skip

  • limit():用於讀取指定數量的文檔-->db.stu.find().limit(4)
  • skip():用於跳過指定數量的文檔-->db.stu.find().skip(5)
  • 同時使用-->db.stu.find().limit(4).skip(5)或db.stu.find().skip(5).limit(4)(翻頁)

自定義查詢*

  • 使用$whert後面寫一個函數,範圍滿足條件的數據
  • db.stu.find({$where:function(){return this.age>30;}})
  • db.stu.find().sort({age:1}) 按年齡排序:1升序,-1降序
  • db.stu.find().count()或db.stu.count() 統計數量
  • db.stu.distinct("name",{age:{$gt:18}}) 消除重複(去除大於18、名字重複的數據)

投影

  • 在查詢到的返回結果中,只選擇必要的字段
  • db.stu.find({},{filed:1,...)
    • 參數爲字段與值,值爲1表示顯示,值爲0表示不顯示
    • 特殊:對於_id列默認時顯示的,如果不顯示需要明確設置爲0
    • 其他字段,如果不顯示不寫,不能寫0

數據的備份和恢復

  • 備份數據:mongodump -h dbhost -d dbname -o dbdirectory

    • h:服務器地址,也可以指定端口號
    • d:需要備份的數據庫名稱
    • o:備份的數據存放位置,此目錄中存放着備份出來的數據
    • mongodump -h 192.168.1.65:27017 -d test1 -o ~/Desktop/test1bak
  • 恢復數據:mongorestore -h dbhost -d dbname --dir dbdirectory

    • h:服務器地址
    • d:需要恢復的數據庫實例
    • dir:備份的數據所在位置
    • mongorestore -h 192.168.1.65:27017 -d test2 --dir ~/Desktop/test1bak/test1

聚合aggregate

  • 聚合時基於數據處理的聚合管道,每個文檔通過一個由多個階段組成的管道,可以對每個階 段的管道進行分組、過濾等功能,然後經過一系列的處理,輸出相應的結果
  • db.集合名稱.aggregate({管道:{表達式}})
  • db.stu.aggregate([{$match:{status:"A"}}, {$group:{_id:"$cust_id",total:{$sum:"$amount"}}}])

常用管道

  • 在mongodb中,文檔處理完畢後,通過管道進行下一次處理
  • $group:將集合中的文檔分組,可用於統計結果
    • $group對應的字典裏有幾個鍵,結果就有幾個鍵
    • 分組依據要放到_id後面
    • 去不同的字段的值需要使用$,如:"$age","$name"
    • 取字典嵌套中的值的時候$_id.age
    • 能夠同時按照多個鍵進行分組{$group:{_id:{age:"$age",name:"$name"}}}
      • 結果是:{_id:{age:18,name:"xiaom"}}
  • $match:過濾數據,只輸出符合條件的文檔
  • $project:修改輸入文檔結構,如重命名、增加、刪除字段、創建計算結果
  • $sort:將輸入的文檔排序後輸出
  • $limit:限制聚合管道返回的文檔數
  • $skip:跳過指定數量的文檔,並返回餘下的文檔
  • $unwind:將數組類型的字段進行拆分

表達式

  • 處理輸入文檔並輸出
  • 語法:表達式:"$列名"
  • $sum:計算總和,$sum:1表示以一倍計數
  • $avg:計算平均值
  • $min:獲取最小值
  • $max:獲取最大值
  • $push:在結果文檔中插入值到一個數組中
  • $first:根據資源文檔的排序獲取第一個文檔數據
  • $last:根據資源文檔的排序獲取最後一個文檔數據
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章