MongoDB資料庫(一)

  • 2019 年 10 月 6 日
  • 筆記

前言:Mongodb資料庫是一種非關係型資料庫,之前我們學習的mysql是一種關係型資料庫。

在爬蟲中我們會時常用到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 備份資料庫的位置