MEAN全棧工程師-從入門到棄坑第四天
瞭解mongodb,之前沒用過nosql型別來做資料庫,只用過redis之類的做功能,今天先簡單學習一波mongodb的操作
MongoDB 將資料儲存在靈活的,類似JSON的文件中,這意味著欄位可能因文件而異,並且資料結構可以隨時間變化
之前資料庫都是用關係型資料庫,學這個感覺思想都“昇華”了哈哈,介紹還是看官網的好~移步官網mongodb介紹
這波學習的主要是基礎命令,然後還有聚合函式,果然一句SQL都沒有OAO
接下來就是貼操作!
0.基礎命令
1) 資料庫命令
建立/切換 use 資料庫名
顯示所有資料庫 show dbs
顯示當前資料庫 db
刪除資料庫 db.dropDatabase()
* 2) 集合命令
建立 db.createCollection(集合名)
顯示集合列表 show collections/tables
刪除集合 db.集合名.drop()
3) 文件命令
增加文件 db.集合名.insert(資料)
* 修改 db.集合名.update({查詢條件},{修改的目標}) 將指定的文件全部改成指定的值
db.集合名.update({查詢條件},{$set:{"鍵名","新的值"}}) 只修改指定鍵名的值
刪除 db.集合名.remove({查詢條件})
1.高階命令
$gt 大於
db.集合名.find({"鍵名":{$gt:值}})
$lt 小於
db.集合名.find({"鍵名":{$lt:值}})
$gte 大於等於
db.集合名.find({"鍵名":{$gte:值}})
$lte 小於等於
db.集合名.find({"鍵名":{$lte:值}})
$ne 不等於
db.集合名.find({"鍵名":{$ne:值}})
區間查詢
db.集合名.find({"鍵名":{$gt:值,$lt:值}})
* $in 在集合中
db.集合名.find({"鍵名":{$in:[值]}}) $in後面是 array []
$nin 不在集合中
db.集合名.find({"鍵名":{$nin:[值]}}) $nin後面是 array []
$size 值的個數
db.集合名.find({"鍵名":{$size:個數}})
$exists 是否存在某個鍵名
db.集合名.find({"鍵名":{$exists:true|false}})
示例 db.man.find({"address":{$exists:false}})
* $or 或者,多個條件滿足一個就可以
db.集合名.find({$or:[條件1,條件2,……}])
示例 db.man.find({$or:[{"name":"qiqi"},{"age":18}]})
* 模糊查詢,值是正則表示式
db.集合名.find({})
示例 db.man.find({"name":/q/})
*2.排序
db.集合名.find({}).sort({"鍵名1":1,"鍵名2",-1});
1 升序
-1 降序
示例 db.man.find({}).sort({"age":1});
*3.限制輸出
1)limit(n) 限制輸出n條
db.集合名.find().limit(n);
示例 年齡升序前三條
db.man.find({}).sort({"age":1}).limit(3);
2) skip(n) 跳過n條輸出
db.集合名.find().skip(n);
示例 跳過3條輸出2條
db.man.find({}).sort({"age":1}).skip(3).limit(2);
2個組合常用於分頁,skip 優先順序比 limit 高
4.聚合函式(aggregate
1) 核心語法:
db.集合名.aggregate([
{管道1:{表示式}},
{管道2:{表示式}},
{管道3:{表示式}}
]);
2)$group 分組
db.集合名.aggregate(
{$group:
{
_id:'$欄位名',
別名:{聚合函式:'$欄位名'}
}
}
);
示例:統計每個年齡段的總人數
db.man.aggregate(
{$group:
{
_id:'$age',
count:{$sum:1}
}
}
);
示例:統計每個年齡段的人數名單
db.man.aggregate(
{$group:
{
_id:'$age',
count:{$sum:1},
名單:{$push:'$name'} $push:把每一組資料拼接成一個數組
}
}
);
3) match 管道,匹配條件
db.集合名.aggregate({
$match:{"鍵名":{$gt:18}}
});
示例:
age等於19的人
db.man.aggregate({
$match:{"age":19}
});
統計每個年齡段的人數名單
db.man.aggregate([
{$match:{"age":19}},
{$group:
{
_id:'$age',
count:{$sum:1},
名單:{$push:'$name'}
}
},
$sort:{age:1}
]);
4) $project 管道,限定輸出欄位
db.集合名.aggregate({
$project:{
name: 1|0 //1顯示,0不顯示
}
});
示例:
只顯示名字和年齡
db.man.aggregate({
$project:{_id:0,age:1,name:1} //_id不寫預設顯示,其他不寫預設不顯示
});
5) $sort 排序,$skip 跳過 ,$limit 限制輸出
db.集合名.aggregate({
$sort:{
'name': 1|-1
}
});
db.集合名.aggregate({
$skip:n
});
db.集合名.aggregate(
{$limit:n} 限制輸出n條
);
示例:
db.man.aggregate(
{$limit:3}
);
示例:
db.man.aggregate([
{$group:
{
_id:'$age',
count:{$sum:1},
名單:{$push:'$name'}
}
},
{$sort:{'age':1}},
{$skip:2},
{$limit:3}
]);
6) $unwind 管道,將陣列欄位進行拆分,每個值為每一條資料
db.集合名.aggregate({
$unwind:'鍵名'
});
示例:
db.man.aggregate({
$unwind:'$interset'
});