MongoDB資料庫常用操作
阿新 • • 發佈:2018-12-27
MongoDB資料庫常用操作
- 1.檢視所有的資料庫
- 格式: show databases;
- 簡寫: show dbs;
- 2.建立或者使用一個數據庫
- 格式: use 資料庫名;
- 當對應的資料庫不存在的時候,表示建立該資料庫
- 如果資料庫已經存在,表示使用該資料庫
- 注意:
- 如果建立了一個新的資料庫,而該資料庫中沒有資料,則使用show dbs檢視的時候看不到,插入資料庫後,即可檢視到
- 插入資料: db.student.insert({name:“Lucy”})
- 格式: use 資料庫名;
- 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:如果對應的集合不存在表示建立一個集合,並插入資料
- 如果對應的集合存在,表示直接插入一條資料
- 方式1:
- 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”)
- 格式: db.集合名.insert(資料)
- 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會報錯
- 示例:
- 格式: db.集合名.save(資料) 使用方法與insert一致
- 1.新增一個數據
-
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()
- 1.查詢所有的資料
-
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.student.update({name:“ZhaoLiu”},{address:“濱江”})
- 格式:db.集合名.update(query,{$set:{屬性名:屬性值}})
- 其他修改資料的格式
- 格式:db.集合名.update(query,{$inc:{屬性名:值}})
- 表示在某個屬性上新增某個值
- 需求:
- MySQL資料庫修改資料:
意外!! * 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:{ 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.student.insert(
-
格式:
- 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()