1. 程式人生 > >MongoDB資料庫常用操作

MongoDB資料庫常用操作

MongoDB資料庫常用操作

  • 1.檢視所有的資料庫
    • 格式: show databases;
    • 簡寫: show dbs;
  • 2.建立或者使用一個數據庫
    • 格式: use 資料庫名;
      • 當對應的資料庫不存在的時候,表示建立該資料庫
      • 如果資料庫已經存在,表示使用該資料庫
    • 注意:
      • 如果建立了一個新的資料庫,而該資料庫中沒有資料,則使用show dbs檢視的時候看不到,插入資料庫後,即可檢視到
      • 插入資料: db.student.insert({name:“Lucy”})
  • 3.檢視當前使用的資料庫
    • 格式: db 代表的是當前資料庫
    • 或者 db.getName() 可以檢視當前資料庫的名字
  • 4.刪除當前資料庫
    • db.dropDatabase()
  • 5.幫助命令 help
  • 6.退出
    • exit

MongoDB資料庫常用操作–集合的操作

  • 1.檢視當前庫中的所有集合(相當於關係型資料庫的 表)
    • 格式: show collections;
  • 2.建立一個集合
    • 方式1:
      • db.createCollection(“集合名”)–集合名需要加上引號
      • 例:db.createCollection(“集合名”)
    • 方式2:
      • db.集合名.insert(資料)
      • 例:db.student2.insert({name:“張三”})
    • 區別:
      • 方式1是建立一個空的集合,如果集合已經存在,不會覆蓋建立
      • 方式2:如果對應的集合不存在表示建立一個集合,並插入資料
      • 如果對應的集合存在,表示直接插入一條資料
  • 3.刪除一個集合
    • 格式: db.集合名.drop()

MongoDB資料庫常用操作–文件的操作

  • 1.插入資料(相當於關係型資料庫表中一行資料 row)

    • 1.新增一個數據
      • 格式: db.集合名.insert(資料)
        • 資料: key-value的形式
        • 是bson格式, 與json格式一樣
        • 格式:
          • 1.{key1:value,key2:value, keyN:value} – jsonObject
          • 2.[{key1:value,key2:value, keyN:value}, {key1:value,key2:value, keyN:value}] – jsonArray
          • 3.{key1:巢狀json資料,key2:value, keyN:value}
      • 示例:
        • db.student.insert({name:“LiSi”,age:18,address:“BeiJing”})
        • WriteResult({ “nInserted” : 1 })表示插入成功
        • 注意: mongodb插入資料時會預設生成一個 _id相當於關係型資料庫中的主健
        • 如: “_id” : ObjectId(“5b8f45c12e3e35173c33f13c”)
    • 2.新增多個數據
      • 格式: db.集合名.insert([資料1,資料2,資料n])
      • 示例:
        • db.student.insert([{name:“TianQi”,age:16,address:“HeFei”}, {name:“WangWu”,age:22,address:“DongJing”}, {name:“ZhaoLiu”,age:20,address:“NanJing”}])
    • 3.插入資料 save 儲存
      • 格式: db.集合名.save(資料) 使用方法與insert一致
        • 示例:
          • db.student.save({name:‘錢毅’,age:32,address:“江干”})
        • 區別:
          • db.student.save({ “_id” :ObjectId(“5b8f47d03d9b6b894071334b”),name:‘錢毅’})
          • 如果使用的是save,而且設定_id屬性,且_id已經存在時save表示修改資料
          • db.student.insert({ “_id” :ObjectId(“5b8f47d03d9b6b894071334b”),name:‘周毅’})
          • 如果使用的是insert,而且設定_id屬性,且_id已經存在時, 則insert會報錯
  • 2.查詢資料—結果是 bson的形式

    • 1.查詢所有的資料
      • 格式: db.集合名.find()
    • 2.根據條件來查詢資料
      • MySQL資料庫: select 欄位名, from 表 where 條件
      • MongoDB資料庫格式: db.集合名.find(query,names)
        • 引數query 是查詢條件
        • 引數names 是要展示的欄位名
      • 注意:
        • query,names都是json的資料格式
        • query引數
          • 如: {age:22} 表示查詢age=22的資料
        • names引數
          • 如: {name:1,age:1} 表示只顯示name屬性和age屬性
        • 注意:如果沒有names,則所有的屬性及值都顯示
          • 1表示顯示, 0 表示不顯示
      • 需求:查詢年齡是22歲的人的姓名,地址
        • 例: db.student.find({age:22},{name:1,address:1})
    • 3.查詢一條資料
      • 格式:
        • db.集合名.findOne(query,names)
      • 示例:
        • db.student.findOne({name:‘Lucy’})
      • 根據_id來查詢
      • 示例:
        • db.student.findOne({"_id":ObjectId(“5b8f47d03d9b6b894071334a”)})
    • 4.格式化查詢結果
      • 格式: db.集合名.find().pretty()
  • 3.資料的修改

    • MySQL資料庫修改資料:
      • update 表名 set 欄位名 = 屬性值…where 條件
    • MongoDB格式:
      • db.集合名.update(query,set,{upsert:布林型別,multi:布林型別})
      • 引數都是json的格式
    • 1.query 查詢條件
    • 2.set 要修改的屬性和對應的屬性值
      • 需求:
        • 將ZhaoLiu的地址改為濱江
      • 示例:
        • db.student.update({name:“ZhaoLiu”},{address:“濱江”})
          • 注意: 如果以以上方式修改,是將整個資料改為 {address:“濱江”},而不是隻修改address屬性只修該屬性:
        • 正確的開啟方式
        • db.student.update({name:“ZhaoLiu”},{$set:{address:“濱江”}})
      • 格式:db.集合名.update(query,{$set:{屬性名:屬性值}})
      • 其他修改資料的格式
        • 格式:db.集合名.update(query,{$inc:{屬性名:值}})
        • 表示在某個屬性上新增某個值
意外!!
	* 3. upsert 表示在修改資料的時候,如果查詢條件沒有找到對應的資料,
		- 是否將修改的內容當作新的資料新增到集合中
			- true 表示新增進來
			- false 表示不當作新資料新增進來
			- 預設是false
		- 例:
			- db.student.update({name:"LiLei"},{address:"九堡"},{upsert:true})
* 4.multi
	- 在修改資料時如果查詢出了多條符合條件的資料,是否將多條資料全部進行修改
		- true 表示全部都修改
		- false 表示值修改匹配的第一條資料
		- 預設是false
	- 示例:
		- db.student.update({name:"Lucy"},{$set:{sex:"不明"}},{multi:true})
  • 4.刪除資料
    • MySQL資料庫格式:delete from 表名 where 條件
    • MongoDB資料庫格式:
      • db.集合名.remove(query,{justOne:布林值})
    • 示例:
      • db.student.remove({name:“LiLei”})
      • db.student.remove({name:“Lucy”},{justOne:true})
        • 注意:預設會將所有符合條件的資料都刪除,
        • justOne表示是否只刪除 第一條符合條件的資料
        • true 只刪除一條, false表示全部刪除, 預設為false

MongoDB資料庫常用操作–查詢條件

  • 1.比較運算子

    • $gt 大於
    • $lt 小於
    • $gte 大於等於
    • $lte 小於等於
    • $eq 等於 或者 :
    • $ne 不等於
    • 格式:
      • db.集合名.find({欄位名:{運算子:值}})
    • 需求:
      • 查詢年齡大於60的student
    • 示例:
      • db.student.find({age:{$gt:60}})
    • 需求:
      • 查詢年齡在大於等於40且小於等於60的資料
    • 示例:
      • db.student.find({age:{$gte:40}})
  • 2.邏輯運算子

    • $and 且 或者 ,

      • 格式: db.集合名.find({條件1,條件2})
      • 格式2:db.集合名.find({$and:[{條件1},{條件2}]})
      • 需求:
        • 找出姓名是 TianQi 的 且 年齡是 22歲 的資料?
      • 示例:
        • db.student.find({name:“TianQi”,age:22})
      • 或者
        • db.student.find({$and:[{name:“TianQi”},{age:22}]})
      • 需求:
        • 查詢年齡在大於等於20且小於等於22的資料
      • 錯誤寫法: db.student.find({age:{KaTeX parse error: Expected 'EOF', got '}' at position 7: gte:20}̲,age:{lte:22}})
      • 正確寫法:
        • db.student.find({age:{ g t e : 20 , gte:20, lte:22}})
        • db.newclass.find({KaTeX parse error: Expected '}', got 'EOF' at end of input: and:[{age:{gte:18}},{age:{$lte:20}}]})
    • $or 或者

      • 格式:
        • db.集合名.find({$or:[{條件1},{條件2}]})
      • 需求:
        • 查詢數年齡是 20 的或者 22 的
      • 示例:
        • db.student.find({$or:[{age:20},{age:22}]})
      • 需求:
        • 查詢出年齡是20的且住在濱江的 或者 年齡22且住DongJing的
      • 示例:
        • (age = 20 and address=“濱江”) or (age = 22 and address=“DongJing”)
    • $not 非

      • 格式: db.集合名.find({$not:{條件1}})
  • 3.模糊運算子

    • 插入幾條資料:
      • db.student.insert(
        [{name:‘張三’,age:22,address:“北京”,sex:“女”},
        {name:‘李四’,age:33,address:“南京”,sex:“女”},
        {name:‘王武’,age:44,address:“東京”,sex:“男”},
        {name:‘趙六’,age:55,address:“西京”,sex:“男”},
        {name:‘田七’,age:66,address:“中京”,sex:“男”}])
    • 格式:

      • db.集合名.find({欄位名:/匹配的資料/})
      • 注意: / / 不需要將引號
    • 需求:

      • 查找出名字中包含 張 字的資料
    • 示例:

      • db.student.find({name:/張/})
    • /^字元/ 表示以某個字元開始的資料

    • /字元$/ 表示以某個字元結尾的資料

    • 需求: 查找出姓 趙 的資料

    • db.student.find({name:/^趙/})

    • db.student.find({name:/七$/})

  • 4.分頁 ---- 關係: limit 值1,值2

    • limit(number) 表示讀取指點數量的資料 相當於 值2

    • skip(position) 表示跳到指定下標位置開始讀資料 注: 位置從 0 開始

    • db.student.find().skip(3)

    • db.student.find().limit(3)

    • 需求: 從第六條開始,獲取3條資料

    • db.student.find().skip(6).limit(3)

    • 需求: 獲取第n頁的3條資料,

    • 格式: db.student.find().skip((n-1)*3).limit(3)

  • 5.排序 sort 欄位名 升序/降序

    • 格式:
      • db.student.find().sort({欄位名:1/-1})
      • 1: 表示升序
      • -1: 降序
    • 需求:
      • 按照年齡的升序排序
    • 示例:
      • db.student.find().sort({age:1})
  • 6.計算查詢結果的數量

    • db.student.find().count()