爬虫学习笔记 -mongodb 数据库

启动mongodb的客户端和服务端

  • sudo service mongod start
    • sudo mongod --config /etc/mongod.conf &
  • mongo

mongodb中数据库和集合的命令

  • 数据库不需要提前创建,插入数据的时候自动创建
  • show dbs/show databases #查看所有的数据库
  • use 数据库名 #使用数据库
  • 数据库名.dropDatabase() #删除数据库
  • 集合不需要提前创建,插入数据的时候自动创建
  • show collections #查看所有的集合
  • db.集合名.drop() #删除集合
  • db.集合名.find() #集合的使用

insert和save的区别

  • insert插入,_id重复会报错
  • save 保存,_id存在会更行,不存在会插入

update

  • db.col_name.update({条件},{name:1}) #会把满足条件的数据的第一条更新为{name:1}
  • db.col_name.update({条件},{$set:{name:1}})
    • 把满足条件的第一条的name值更新成1
  • db.col_name.update({条件},{$set:{name:1}},{multi:true})

删除

  • db.col_name.remove({条件},{justOne:flase}) #默认删除全部满足条件的内容
  • db.col_name.remove({条件},{justOne:ture}) 删除一条满足条件的内容

mongodb中数据库的方法

  • db 查看当前所在的数据库
  • show dbs 查看所有的数据库
  • use db_name 使用数据库
  • db.dropDatabase() 删除数据库

mongodb中集合的方法

  • show collections 查看所有的集合
  • db.collection.find()
  • db.collection.drop()

mongodb的增删改查的方法

  • 插入

    • insert() 插入数据,_id相同会报错
    • save() _id相同会更新
  • 删除

    • db.collection.remove({条件},{justOne:flase}) #全部删除满足条件的数据
  • 更新

    • db.collection.update({条件},{$set:{name:10086}},{multi:true})

      默认更新一条,multi为true会更新全部


字典排序

>>> json.dumps(testdict, sort_keys=True)
'{"a": 1, "b": 2, "c": 3}'

命令练习

db.stu.insert({"name" : "郭靖", "hometown" : "蒙古", "age" : 20, "gender" : true },{"name" : "⻩蓉", "hometown" : "桃花岛", "age" : 18, "gender" : false },{"name" : "华筝", "hometown" : "蒙古", "age" : 18, "gender" : false },{"name" : "⻩药师", "hometown" : "桃花岛", "age" : 40, "gender" : true },{"name" : "段誉", "hometown" : "⼤理", "age" : 16, "gender" : true },{"name" : "段王爷", "hometown" : "⼤理", "age" : 45, "gender" : true },{"name" : "洪七公", "hometown" : "华⼭", "age" : 18, "gender" : true })


db.tv3.aggregate({$group:{_id:{country:'$country',province:'$province',userid:'$userid'}}},{$group:{_id:{country:'$_id.country',province:'$_id.province'},count:{$sum:1}}}

比较运算符

⼩于:$lt (less than)
⼩于等于:$lte (less than equal)
⼤于:$gt (greater than)
⼤于等于:$gte
不等于:$ne



逻辑运算符

  • and :{name:"",age:""} 此时name和age表示and的逻辑
  • or : {$or:[{条件1},{条件2}]} 条件1和2之前属于or关系

范围运算符

  • $in :在范围内 {age:{$in:[19,20,30]}}
  • $nin :不在范围内

正则

db.products.insert([{ "_id" : 100, "sku" : "abc123", "description" : "Single line description." },{ "_id" : 101, "sku" : "abc789", "description" : "First line\nSecond line" },{ "_id" : 102, "sku" : "xyz456", "description" : "Many spaces before line" },{ "_id" : 103, "sku" : "xyz789", "description" : "Multiple\nline description" }])


投影

指定数据内容的字段
db.stu.find({条件},{name:1,_id:0})
返回数据中只会包含name字段,_id不会显示


mongodb的分组

  • 分组
db.stu.aggregate(
  {$group:{_id:"$hometown",count:{$sum:1},total_age:{$sum:"$age"},avg_age:{$avg:"$age"}}}
  )
  • _id分组的依据
  • $age 取age对应的值
  • $sum:1 把每条数据作为1进行统计,统计的是个数
  • $sum:"$age" 统计年龄对应的和
  • $group对应的字典中的键是输出数据的键
  • 不分组
db.stu.aggregate(
  {$group:{_id:null,count:{$sum:1}}}
  )

统计整个文档

  • 数据透视
    把不同行的数据,放到一行来展示
db.stu.aggregate(
  {$group:{_id:"$gender",name:{$push:"$name"},hometown:{$push:"$hometown"}}}
  )
  • 按照过个字段进行分组
    按照多个字端进行分组,_id的值是一个json
db.stu.aggregate(
  {$group:{_id:{hometown:"$hometown",gender:"$gender"},count:{$sum:1}}}
  )

多字段分组练习
当某个键对应的值是字典的时候,取其中的值需要使用.操作,$_id.country表示取到_id这个字典下的country的键对应的值

db.tv3.aggregate(
  {$group:{_id:{country:"$country",province:"$province",userid:"$userid"}}},
  {$group:{_id:{country:"$_id.country",province:"$_id.province"},count:{$sum:1}}}
  )

$project的使用

db.stu.aggregate(
  {$group:{_id:"$hometown",count:{$sum:1}}},
  {$project:{_id:0,sum:"$count",hometown:"$_id"}}
  )
db.tv3.aggregate(
  {$group:{_id:{country:"$country",province:"$province",userid:"$userid"}}},
  {$group:{_id:{country:"$_id.country",province:"$_id.province"},count:{$sum:1}}},
  {$project:{country:"$_id.country",province:"$_id.province",counter:"$count",_id:0}}
  )

$skip $limit $sort

db.stu.aggregate(
  {$group:{_id:"$hometown",count:{$sum:1}}},
  {$sort:{count:-1}},
  {$skip:1},
  {$limit:2}
  )



mongodb 复习

mongodb的运算符

- 比较运算符
  - $gt 大于
  - $lt 小于
  - $gte 大于等于
  - $lte 小于等于
  - $ne 不等
- 逻辑运算符
  - and  {age:"",name:""}
  - or {$or:[{条件1},{条件2}]}
- 范围运算符
  - $in db.col.find({age:{$in:[18,19,30]}})
  - $nin

mongodb中的计数,去重,排序

- 计数
  - db.col.count({条件})
  - db.col.find({条件}).count()
- 去重
  - db.col.distinct("字段",{条件})
- 排序
  - db.col.find().sort({})
- 投影
  - 修改输出的内容
  - db.col.find({条件},{_id:0,name:1})

mongodb聚合中$group的使用

按照一个字段分组
db.col.aggregate(
  {$group:{_id:"$gender",count:{$sum:1}}}
  )
按照多个字段分组
db.col.aggregate(
  {$group:{_id:{gender:"$gender",hometown:"$hometown"},count:{$sum:1}}}
  )
不分组,统计整个文档
db.col.aggregate(
  {$group:{_id:null,count:{$sum:1}}}
  )
$push:把字段值放入一个数组
db.col.aggregate(
  {$group:{_id:"$gender",name:{$push:"$name"}}}
  )


mongodb中$match

过滤

db.col.aggregate(
  {$match:{age:{$gt:18}}}
    )

mongodb中$project

投影,修改文档的输入输出结构

db.col.aggregate(
  {$project:{_id:0,name:1,new_age:"$age",x:"$a.b"}}
    )

mongodb索引

  • 创建索引
    • db.col.ensureIndex({name:1})
    • db.col.createIndex()
  • 查看索引
    • db.col.getIndexes()
  • 删除索引
    • db.col.dropIndex({name:1})
  • 建立联合索引
    • db.col.ensureIndex({name:1,age:-1})
  • 建立唯一索引
    • db.col.ensureIndex({name:1},{unique:true})

mongodb备份和恢复

  • 备份
    • mongodump -h host -d database -o output_path
  • 恢复
    • mongorestore -h host -d database --dir 恢复的路径

pymongo的使用

from pymongo import MongoClient

#实例化client
client = MongoClient(host,port)  
#选择集合
collection = client["db"]["collection"]

#查询
collection.find() #返回全部的数据,返回cursor对象,只能获取其中内容一次
collection.find_one() #返回一条

#插入
collection.isnert_one()
collection.insert_many()

#更新
collection.update_one({name:"a"},{"$set":{"name":"noob"}})
collection.update_many()

#删除
collection.delete_one()
collection.delete_many()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值