爬蟲學習筆記(十一)數據存儲——MongoDB 2020.5.12

前言

本節學習數據存儲的MongoDB

1、安裝

建議看官網
可參考https://blog.csdn.net/maihilton/article/details/81974660

安裝好之後啓動:

net start mongodb #啓動服務
mongo #啓動客戶端

還有一些用戶的設定,見官網教程

2、數據

存儲形式

dict_data = {
 "_id":1,
 name:"王五",
 age:55,
 gender:true
}

db.stu.insert(dict_data)
db.stu.insert({_id:1,name:"李四",age:38,gender:true,like:"🐶🐶"})
db.stu.insert({_id:2,name:"張三",age:48,gender:true,like:"🐱🐱"})
db.stu.insert({_id:3,name:"王五",age:58,gender:true,like:"🐔🐔"})
db.stu.insert({_id:4,name:"小紅",age:18,gender:false,like:"🐭🐭"})
db.stu.insert({_id:5,name:"小蘭",age:28,gender:false,like:"🐶🐶"})
db.stu.insert({_id:6,name:"小明",age:10,gender:true,like:"🐔🐔"})
db.stu.insert({_id:7,name:"小麗",age:30,gender:false,like:"🐔🐔"})
db.stu.insert({_id:8,name:"A",age:30,gender:false,like:"🐔🐔"})
db.stu.insert({_id:9,name:"小明",age:10,gender:true,like:"🐔🐔"})
db.stu.insert({_id:10,name:"小麗",age:30,gender:false,like:"🐔🐔"})

3、一些操作

db.stu.find({
 $where:function () {
  return this.age > 20
 }
})

// 聚合查詢查詢
db.xx.aggregate(
 [
  {管道1},
  {管道2}
 ]
)

// $group  分組;  男女分組性別分組
db.stu.aggregate([{$group:{_id:"$gender"}}])

// 按照 寫別分組 ,求年齡之和
db.stu.aggregate(
 [
  {$group:{_id:"$gender",sumage:{$sum:"$age"}}}
 ]
 )
db.stu.aggregate(
 [
  {$group:{_id:"$gender",sumage:{$avg:"$age"}}}
 ]
 )

// 按照愛好分組, 求最大值 age
db.stu.aggregate([
 {$group:{_id:"$like",max_age:{$max:"$age"}}}
 ])
db.stu.aggregate([
 {$group:{_id:"$like",max_age:{$min:"$age"}}}
 ])
db.stu.aggregate([
 {$group:{_id:"$like",max_age:{$first:"$age"}}}
 ])
db.stu.aggregate([
 {$group:{_id:"$like",max_age:{$last:"$age"}}}
 ])
 
// 統計 這批人按性別分養的寵物
db.stu.aggregate([
{
 $group:{_id:"$gender",animate:{$push:"$like"}}
}
 ])

//  寵物是小雞的 人有哪些?
db.stu.find({like:"🐔🐔"})
db.stu.aggregate([
  {$match:{like:"🐔🐔"}}
 ])
// 求 年齡大於20; 男女年齡的平均值
db.stu.aggregate([
 {$match:{age:{$gt:20}}},
 {$group:{_id:"$gender",avgage:{$avg:"$age"}}}
 ])

// $project 投影,顯示的字段 顯示1or true
// 求年齡小於50;求按照愛好分組, 求年齡之和 求年齡平均值,; 只想看之和
db.stu.aggregate([
 {$match:{age:{$lt:50}}},
 {$group:{_id:"$like",sumage:{$sum:"$age"},avgage:{$avg:"$age"}}},
 {$project:{sumage:true}}
 ])

// $sort 排序
db.stu.aggregate([
{$sort:{age:-1}}
 ])
db.stu.aggregate([
 {$match:{age:{$lt:50}}},
 {$group:{_id:"$like",sumage:{$sum:"$age"},avgage:{$avg:"$age"}}},
 {$project:{sumage:true}},
 {$sort:{sumage:1}}
 ])

//  跳過2個 顯示5
db.stu.aggregate(
 [
  {$skip:2},
  {$limit:5}
 ])
db.stu.aggregate(
 [
  {$limit:5},
  {$skip:2},
 ])

// $unwind  拆分列表;  $push
// 男女分組,之後 各自的名字有哪些
db.stu.aggregate([
 {$group:{_id:"$gender",allname:{$push:"$name"}}},
 {$unwind:"$allname"}
 ])

// 年齡小於60歲,按照性別分組,取出喜歡的寵物, 拆分文檔
db.stu.aggregate(
 [
  {$match:{age:{$lt:60}}},
  {$group:{_id:"$gender",animate:{$push:"$like"}}},
  {$unwind:"$animate"}
 ]
 )

// 50W 的數據
for (var i = 0; i <= 500000; i++) {
 db.data.insert(
 {
  _id:i,
  user:"user"+i,
  age:i
 })
}

// _id  1毫秒
db.data.find({_id:333333}).explain('executionStats')
// user 222毫秒 -- 1毫秒
db.data.find({user:"user333333"}).explain('executionStats')
// age  227毫秒 --- 0毫秒
db.data.find({age:333333}).explain('executionStats')

// 設置 內容key 爲id ;提高查詢速度
db.data.ensureIndex({user:1})
db.data.ensureIndex({age:1})

// 查看索引
db.data.getIndexes()
// 刪除索引
db.data.dropIndex('key_1')
// 備份數據庫
mongodump -h 127.0.0.1:27017 -d five -o /Users/apple/Desktop/beifen 
// 恢復數據庫
mongorestore -h 127.0.0.1:27017 -d six --dir /Users/apple/Desktop/beifen/five
// 導出文件
mongoexport -h 127.0.0.1:27017 -d six -c stu -o data.json
mongoexport -h 127.0.0.1:27017 -d six -c stu -o data.csv --type csv -f _id,user,age,like
// 導入文件
mongoimport -h 127.0.0.1:27017  -d seven -c stu --file data.json

結語

簡單瞭解下MongoDB

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章