mogodb使用

13 篇文章 1 订阅
4 篇文章 0 订阅

Mongodb 使用 - 以集合存储

  • 启动

    • mongo
  • 查看数据库

    • show databases;
    • show dbs
    • 当数据库中有数据的时候才会显示出来
  • 查看当前使用的数据库

    • db
  • 使用数据库

    • use 数据库名
  • 创建数据库:

    • 直接使用use 数据库名
    • 没有的数据库直接使用
  • 手动创建集合 - 一般直接添加,不去创建

    • db.createCollection(name,options)
  • 集合中的 _id 为唯一的

  • 查看集合

    • show collections
  • 向数据库中的某个集合中插入数据

    • db.集合名.insert({“1”:10})
      • 当键 _id 重复的时候使用这个插入会报错
    • db.集合名.save({})
      • _id 重复的时候会修改原来的数据
  • 查看集合的内容

    • db.集合名.find()
  • 更新

    • db.集合名称.update(原内容,修改)
      • 直接将原来的内容替换成修改的内容,原来的内容就会消失
    • db.集合名.update(原内容,{$set(修改内容)})
      • 只修改要修改内容中的部分
    • update中有一个参数 {multi} - 默认只修改一条
      • 要是使用这个参数将其设置成true则更新多条数据 : {multi:true}
      • 这个只能配合$set使用

删除

  • 删除
    • 删除多条 – 默认
      db.集合名.removed(删除内容)
    • 值删除一条,加一个参数
      • 在removed()中添加:{justOne:true} 即可
      • remover(删除内容,{justOne:true})
  • 删除数据库
    • use text;
    • db.dropDatabase() - 删除text
    • db代表的是当前使用的数据库
  • 删除集合
    • db.集合名.drop()

查询

  • 查询
    • find()查询 条件文档{age:18} age=18的
      • db.集合名.find({条件文档})
    • findOne()查询 , 查询,只返回第一个
      • db.集合名.findOne({条件文档})
    • pretty() , 将结果格式化
      • db.集合名.find({条件文档}).pretty()
    • 比较运算符
      • 等于:默认判断等于,没有运算符:
      • 小于:$lt (less than)
      • 小于等于:$lte (less than equal)
      • 大于:$gt (greater than)
      • 大于等于:$gte
      • 不等于:$ne
      • 举例:
        • db.stu.find({age:{$gte:18}}): 大于等于18的
      • 取范围:$in
        • db.stu.find(age:{$in:[18,28,38]}): age是18,28,38的
    • 逻辑运算符
      • and:{},{}
      • 或:$or{},{}
  • 正则表达式 (products:为集合名)
    • db.products.find({sku:/^abc/}) – abc开头的
    • db.products.fin({sku:{ r e g e x : " 789 regex:"789 regex:"789}}) – 789结尾的
  • limit()和skip()
    • limit(x):选x个
    • skip(x): 跳过x个
  • 自定义查询语句
    • 可以使用js
      • db.集合名.find($where:function(){return this.age<=18}) - 返回age<=18的
  • 返回部分数据 投影
    • db.集合名.find({条件},{显示字段:1})
    • db.集合名.find(age:{$gt:18},{name:1}) - 显示写1,不显示的写0,默认_id是显示的,要是不想让其显示则要写_id:0

排序 统计去重

  • 排序
    • db.集合名.sort({排序字段:排序方式})
      • 排序方式:1:升序; -1:降序
  • 统计个数
    • db.集合名.count({输出条件})
    • db.集合名.find({输出条件}).count()
      • 中的count()中不能写条件
  • 去重
    • db.集合名.distinct(去重字段,条件)
      • 返回列表

聚合 aggregate

  • 分组 $group
    • db.集合名.aggregate(
      {KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{_id:"分组名"}}
      )
      • _id:分组的依据
  • $project 修改显示的字段名
    • db.集合名.aggregate(
      {KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{_id:"分组名"}},
      {KaTeX parse error: Expected '}', got 'EOF' at end of input: …oject:{gender:"_id"}}
      )
      • 将_id显示的时候显示为gender
  • $match
    • 用于过滤数据,只输出符合条件的文档
    • db.集合名.aggreate(
      {KaTeX parse error: Expected '}', got 'EOF' at end of input: match:{age:{gt:20}}}
      )
      • 输出age 大于 20 的数据
  • $sort
    • 将输入文档排序后输出
    • db.集合名.aggreagte({$sort:{age:1}})
    • 按照年龄升序
  • $limit
    • 显示多少条查询数据
    • db.集合名.aggreagte({$limit:2})
      • 前两个
  • $skip
    • 跳过几条数据
    • db.集合名.aggreagte({$skip:2})
  • $unwind
    • 将文档中的某一个数组类型字段拆分成多条
    • db.集合名.aggreagte({ u n w i n d : " unwind:" unwind:"字段名"})

$group的注意点

  • $group对应的字典中有几个键,结果就有几个键,每条包含数组中的一个值
  • 分组一句需要放在_id后面
  • 取不同字段的值需要使用 , ‘ ,` ,gender,$age`
  • 同时按照不同的字段进行分组就可以达到去重的效果
    • {$group:{_id:{country:"$country",province:"$province"}}}
      • 结果: {_id:{country:"",province:""}}
  • 取字典嵌套的字典的值的时候$_id.country

索引

  • 查询时间

    • db.集合名.find().explain(‘executionStats’)
    • executionTimeMillis 字段代表用时
  • 创建索引

    • db.集合名.ensureIndex({属性:1})
      • 1:升序
      • -1:降序
    • 创建属性的值为唯一的要添加
      • db.集合名.ensureIndex({属性1:1,属性2:1},{“unique”:true})
      • 解决数据的去重
  • 查看索引

    • db.集合名.getIndexes()
  • 删除索引

    • db.集合名.dropIndex(“索引名”)

爬虫数据去重,实现增量式爬虫

  • 使用数据库建立关键字段的索引(一个或多个)进行去重

  • 根据url地址进行去重

    • 使用场景
      • url地址对应的数据不会变的情况,url地址能够唯一判别一条数据的情况
    • 思路:
      • 1.url地址存在redis中
      • 2.拿url地址,判断url在redis的url的集合中是否存在
        • 2.1存在:说明url已经被请求过,不在请求
        • 2.2不存在url没有被请求过,请求,把该url存在redis的集合中
      • 布隆过滤器
        • 使用多个加密算法加密url地址,得到多个值
        • 往对应值的位置把结果设置为1
        • 新来的url地址,一样通过加密算法生成多个值
        • 如果对应位置的值全为1说明这个url地址已经抓过
        • 否则没有抓过,就把对应位置设置为1
  • 根据本身进行去重

    • 选择特定的字段,使用加密算法(md5,sha1)将字段进行加密,生成字符串,存入redis集合中
    • 后续心里啊一条数据,同样的方法进行加密,如果得到的字符串在redis中存在,说明数据存在,(对数据进行更新),否则数据不存在,直接插入
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值