圖形化工具的使用:
基本操作
獲取當前資料庫名稱
db.getName()
複製程式碼
建立資料庫
# use 資料庫名, 如果有就切換,沒有就建立
use test_db
複製程式碼
檢視資料庫狀態
db.stats()
複製程式碼
獲取當前資料庫版本
db.version()
複製程式碼
檢視資料庫相關幫助資訊
db.help()
複製程式碼
增刪改查
在
MySQL
等關係型資料庫中,必須先設計表,然後才能進行增刪改查
的操作在
mongodb
中,不需要設計表,
插入資料
- 插入普通資料
// db.集合.insert({}); 集合相當於mysql中的資料表
// insert({...}) 傳遞一個 bson 格式的字串, 類似 json
db.users.insert({name:'zs',sex:'男', height: '172'});
複製程式碼
- 插入多維資料
db.users.insert({
name:'alex', age:18, height: '172', other: {
class: '101',
like: ['code', 'db'],
}
});
複製程式碼
- 陣列資料
db.users.insert({name:'jason', likes: ['code', 'db', 'study', 'sleep']});
複製程式碼
查詢資料
籠統查詢
- 查詢所有資料
// db.集合.find() 相當於sql語句中的: select * from users
db.users.find();
複製程式碼
- 查詢一條資料
// db.集合.findOne() 相當於sql語句中的: select * from users limit 1;
db.users.findOne();
複製程式碼
帶條件的查詢
- 查詢所有符合條件的資料
// db.集合.find(條件) 相當於sql語句中的: select * from users where name='zs';
db.users.find({name:'zs'})
複製程式碼
- 查詢符合條件的第一條資料
// db.集合.findOne(條件) 相當於sql語句中的: select * from users where name='zs' limit 1;
db.users.findOne({name:'zs'})
複製程式碼
範圍條件查詢
-
查詢指定欄位大於或者小於某個值的所有資料
- $lt 小於 相當於sql語句中的 <
// 查詢users集合中身高欄位小於172的所有資料 // SQL語句: select * from users where height < 172 db.users.find({height:{'$lt': 172}}); 複製程式碼
- $gt 大於 相當於sql語句中的 >
// 查詢users集合中身高欄位大於172的所有資料 // SQL語句: select * from users where height > 172 db.users.find({height:{'$gt': 172}}); 複製程式碼
-
查詢指定欄位大於等於或者小於等於的所有資料
- $lt 小於 相當於sql語句中的 <=
// 查詢users集合中身高欄位小於等於172的所有資料 // select * from users where height < 172 db.users.find({height:{'$lte': 172}}); 複製程式碼
- $gt 大於 相當於sql語句中的 >=
// 查詢users集合中身高欄位大於等於172的所有資料 // select * from users where height > 172 db.users.find({height:{'$gte': 172}}); 複製程式碼
-
查詢指定欄位不等於某個值的所有資料
// 查詢指定欄位不等於某個值的所有資料
// select * from user != 'zs'
db.users.find({name: {'$ne': 'zs'}});
複製程式碼
注: 使用關鍵字 $le $lte $gt $gte $ne 必須使用引號引起來, 建議用單引號
設定多個查詢條件
// SQL語句中的and操作符: select * from users where height<=172 and age>10
// 查詢出所有的height欄位小於等於172 並且 age欄位大於10的所有資料
db.users.find({height:{'$lte': 172 },age: {'$gt': 10}});
// 查詢出所有height欄位小於180欄位 並且 age 欄位等於18 的所有資料
db.users.find({height: {'$lt': 172}, age: 10})
// 查詢出 age欄位等於10 或者 height欄位大於等於 180 的所有資料(文件)
// 相當於SQL語句中的: select * from users where age=10 or height>=180
db.users.find({
"$or": [
{ age: 10 },
{height:{"$gte": 180 } }
]
});
複製程式碼
多維欄位的查詢
// 查詢 other_info 欄位中 class 的值為101的資料
db.users.find({
"other.class" : "101",
});
複製程式碼
陣列條件的限制
// 表示查詢 likes 欄位中有 code 和 music 的所有資料(文件)
db.users.find({
likes:{
"$all": ["code", "music"]
}
});
複製程式碼
限制查詢的欄位
// 表示查詢出age等於18的所有資料(文件), 只查詢name欄位
db.users.find({age: 18}, {name:1})
// 表示查詢出age等於18的所有資料(文件), 除了name以外的所有欄位
db.users.find({age: 18}, {name:0})
// 表示查詢出age欄位為18的所有資料(文件)
// 表示只顯示name欄位並且排除預設的_id欄位 {"age":18},{name:1,_id:0}
db.users.find({"age":18},{name:1,_id:0})
複製程式碼
注: 限定條件輸出時,除了預設的_id欄位以外,要麼全部輸出,要麼全部不輸出,不能一個1一個0,
1查詢,0排除, 不然會報錯
修改資料
- 使用 $set 修改欄位,只修改要修改的欄位的值,其他欄位不變化
// 表示將name欄位為zs的所有資料的 age 欄位修改為 18,其他欄位不變
db.users.update({ name: 'zs'},{'$set': {age : 18}});
複製程式碼
- 不使用 $set 修改設定的欄位, 除_id欄位以外,其他欄位就刪除
// 表示將name欄位zs的所有資料的的 age 欄位修改為 20, 並且刪除其他所有欄位
db.users.update( { name: 'zs' }, {age: 20});
複製程式碼
- 修改欄位時,有就直接修改沒有就新增
// 表示將name欄位為zs的所有資料的, name欄位改為xiaoZhang, nickName改為xiaoZhang 其他欄位全部刪除
db.users.update( { name: 'zs' }, {name: "ZhangShang", nickName: "xiaoZhang"})
複製程式碼
資料刪除
- 刪除指定條件的資料
// 表示刪除所有, name為zs的資料
db.users.remove({ name: "zs" })
// 表示刪除所有 name欄位為zs 並且 age欄位為100 的資料
db.users.remove({name:"zs", age:100});
複製程式碼
- 刪除欄位
// 表示刪除name欄位值為zhangShang的所有資料 的 age 欄位,{"age": 1}
// 這個值可以是任意的值,比如(字串,true,null)但是不能不寫
db.users.update({name:'zhangShang'}, { '$unset': {"age": 1} });
複製程式碼
限制查詢條數 (分頁)
/* 表示查詢符合條件的跳過前5條後面的10條資料 */
db.users.find().skip(5).limit(10);
複製程式碼
排序 sort
- 預設是安裝
_id
欄位升序排序, 利用sort
方法可以根據指定的方法排序
/* 根據name欄位升序排序,如果有相同的就根據 height 欄位降序排序*/
db.users.find().sort({
name: 1,
height: -1
});
複製程式碼
限制分頁條數並且排序
db.users.find().skip(5).limit(5).sort({
name: 1,
age: -1
});
複製程式碼
1
表示升序,-1
表示降序