MongoDB資料庫(一)
- 2019 年 10 月 6 日
- 筆記
在爬蟲中我們會時常用到mongoDB資料庫。mongoDB的優點在於易擴展,高性能,靈活的數據了類型。
安裝
安裝步驟很簡單,就不多說了。
這裡推介文章:www.cnblogs.com/tim100/p/6721415.html
mongodb的基礎命令
# 查看資料庫
show dbs
或者
show databases
# 進入一個資料庫 use關鍵字
例如:use admin
# 查看當前所在資料庫
db
# 刪除一個資料庫
db.dropDatabase()
db代表當前資料庫
# 如何創建一個資料庫
use test1
就會創建一個test1資料庫,當不存在創建,存在就進入資料庫。
並且當我們test1中存在數據的時候,show dbs才會顯示出這個資料庫
mongodb中的數據類型
Object ID:文檔ID
String:字元串
Boolean:布爾值,true,false
Integer:整數
Double:浮點值
Arrays:數組或者列表,多個值存儲到一個鍵下
Object:文檔
Null:Null值
Timestamp:時間戳
Date:時間
增刪改查
在mongodb中是不存在表的概念的,而是把數據存放到集合中。
# 創建一個student資料庫,並向stuinfo集合中插入一條數據
use student
db.stuinfo.insert({name:'張三',age:25})
# 查看集合中的數據
db.stuinfo.find()
會輸出:
{ "_id" : ObjectId("5c3079c952f446d98cc93ca4"), "name" : "張三", "age" : 25 }
這裡的_id和關係型資料庫中的主鍵一樣,保證數據的唯一性,是一個16進位
不寫_id會自動生成一個,寫了就不會。#
# 保存,這裡的保存是當不存在_id會創建,存在則會修改
# 當我們執行
db.stuinfo.save({_id:101,name:'小花',age:40})
的時候,_id在上面不存在就會添加上去
# 當我們想修改的時候
db.stuinfo.insert({_id:100,name:'李四',age:111})
即可。而當用insert的時候,_id存在就會報錯
更新數據
# 將符合條件的數據更新
db.stuinfo.update({name:'張三'},{name:'小張',sex:'男'})
# 會將name等於張三的一整行數據更新成我們後面填寫的數據
# 我們只想更新name需要這樣寫
db.stuinfo.update({name:'張三'},{$set:{name:'小張'})
修改指定數據需要使用$set來操作。
# 多行修改,上面的修改無論張三有幾個,都會只修改一條
# 想修改多條,需要添加一個參數
db.stuinfo.update({name:'張三'},{name:'小張',sex:'男'},{multi:true})
即可,當然我們這裡沒有多條數據,你可以多添加幾條試試。
刪除
db.stuinfo.remove({name:'李四'})
# 默認會刪除多行
# 只刪除一行
db.stuinfo.remove({name:'李四'},{justOne:true})
查詢
首先創建一個數據,添加如下數據
use stu
db.stu.insert({name:'小花',sex:'男',age:18,address:'武漢'})
db.stu.insert({name:'小王',sex:'女',age:20,address:'廣州'})
db.stu.insert({name:'小趙',sex:'女',age:25,address:'上海'})
db.stu.insert({name:'小陳',sex:'男',age:10,address:'北京'})
db.stu.insert({name:'小杜',sex:'男',age:30,address:'南京'})
db.stu.insert({name:'小二',sex:'女',age:23,address:'深圳'})
# 查詢性別為男的
db.stu.find({sex:'男'})
# 改變格式輸出
db.stu.find({sex:'男'}).pretty()
# 查詢性別為男的只顯示一個
db.stu.findOne({sex:'男'})
# 查詢年齡為20的
db.stu.find({age:20})
# 比較運算符
小於:$lt
# 查詢年齡大於20的
db.stu.find({age:{$lt:20}})
小於等於:$lte
# 查詢年齡大於等於20的
db.stu.find({age:{$lte:20}})
大於:$gt
# 查詢年齡大於25的
db.stu.find({age:{$gt:25}})
大於等於:$gte
# 查詢年齡大於等於25的
db.stu.find({age:{$gte:25}})
不等於:¥ne
# 查詢年齡不等於25的
db.stu.find({age:{$ne:25}})
範圍運算符
# 查詢年齡為18和25的人
db.stu.find({age:{$in:[18,25]}})
# 查詢年齡不為18和25的人
db.stu.find({age:{$nin:[18,25]}})
# 多條件查詢,年齡為18,並且是在武漢的
db.stu.find({age:18,address:'武漢'})
# 查詢年齡為18,或地點在上海的
db.stu.find({$or:[{age:18},{address:'上海'}]})
# 正則表達式查詢
# 查詢以姓名以小開頭的人
db.stu.find({name:/^小/})
或者
db.stu.find({name:{$regex:'^小'}})
# 查詢前兩行數據
db.stu.find().limit(2)
# 跳過前兩行數據
db.stu.find().skip(2)
# 跳過前兩行顯示兩行
db.stu.find().skip(2).limit(2)
# limit和skip組合可以達到分頁的效果
# 自定義查詢
# 查詢年齡等於18的:
db.stu.find({$where:funtion(){return this.age==18}})
# 寫法和我們jquery中是一樣的。
# 查詢年齡為18的name值
db.stu.find({age:18},{name:1})
# 上面還是會顯示_id,我們修改成
db.stu.find({age:18},{name:1,_id:0})
# 注意,不想顯示_id寫成_id:0
# 其他不想顯示就不寫name:1或age:1,其他欄位寫成name:0會報錯
排序
# 以年齡升序排序
db.stu.find().sort({age:1})
# 以年齡降序排序
db.stu.find().sort({age:-1})
# 多欄位排序直接逗號隔開添加就好
# 所有數據只顯示name值
db.stu.find({},{name:1,_id:0})
# 查詢一共多少行數據
db.stu.find().count()
或者
db.stu.count()
# 查詢年齡大於20的有多少數據
db.stu.find({age:{$gt:20}}).count()
或者
db.stu.count({age:{$gt:20})
去重複
# 去除name重複的
db.stu.distinct('name')
# 在年齡大於20的人中去除name重複的
db.stu.distinct('name',{age:{$gt:20}})
數據備份和恢復
這個密令直接在(終端)cmd中輸入
備份
mongodump -h 伺服器地址 -d 資料庫名字 -o 存放的位置
# 在本地就值接不加-h就好了
恢復
mongorestore -h 伺服器地址 -d 需要回復的資料庫名字 –dir 備份資料庫的位置