mongodb

启动mongodb

  • sudo mongod –config /etc/mongod.conf & 启动服务端
  • mongo 启动客户端

mongodb的增删改查

    • db.collection_name.insert({"_id":"111"})
    • _id如果已经存在,insert方法会报错,不存在的时候,会插入新数据
    • db.collection_name.save({"_id":"111","name":"bob","age":"18"})
    • _id如果存在,会更ddvd cx x新其他键对应的值(name,age),不存在的时候,会新插入数据
    • db.collection_name.remove({条件},{justOne:true})
    • 默认情况下,会删除全部满足条件的内容,justOne:true时值删一条
    • db.collections_name.drop()
    • 删除整个集合(collections_name)
    • db.collections_name.update({name:"bon"},{name:"fan"})
    • 更新 将名字为”bon”改为”fan” 弊端:会将collections_name内容代替如:
      db.text01.find()
      { "_id" : "3", "name" : "fan", "age" : "16" }
      db.text01.update({name:"fan"},{name:"xlnx"})
      { "_id" : "3", "name" : "xlnx" }
    • db.collections_name.update({nmae:"bob"},{$set:{name:"fan"}})
    • 只能修改一条数据,并不会代替,将bob修改为fan
    • db.collection_name.update({条件},{$set:{name:jack}},{multi:true})
    • 默认情况下会修改一条,multi:true时可以修改满足条件的全部数据
    • 注意:multi update only works with $ operatorsmulti:true 只能跟$set连用
    • db.collection_name.find({"age":16}) 查询年龄为16
    • db.collections_name.findOne() 查询只返回第一个
    • db.collections_name.find().pretty()将查询结果格式化

数据库的备份与回复

  • 数据库的备份 mongodump -h hostname -d db -o path
  • 数据库的恢复 mongorestore -h hostname -d db -dri path

比较运算符

  • 等于 默认就是等于判断,没有运算符
  • 大于 $gt db.collection_name.find({age:{$gt:18}}) 查询年龄大于18
  • 大于等于$gte db.collection_name.find({age:{$gte:18}})
  • 小于 $lt db.collections_name.find({age:{$lt:18}})查询年龄小于18
  • 小于等于$lte db.collection_name.find({age:{$lte:18}})
  • 不等于 $ne db.collection_name.find({age:{$ne:18}})

逻辑运算符

  • and
    • 在JSON中写多个条件即可:查询年龄大于或等于18, 并且性别为true的学生
    • db.collections_name.find({age:{$gte:18}},gender:"true"})
  • or $or
    • 使用$or 值为数组,数组中每个元素为json:查询年龄大于18, 或性别为false的学生
    • db.collection_name.find({$or:[{age:{$gte:18}},{gender:true}]})
    • 形式 db.collection_name.find({$or:[{条件1},{条件2},{条件3}.....]})

范围运算符

  • 使用” in"" i n " , " nin” 判断是否在某个范围内查询年龄为18、 28
  • db.collection_name.find({age:{$in:[18,28]}})

  • $nin 不在范围内

  • db.collections_name.find({age:{$gt:{$in:[25,16]}}})

mongodb的语句

  • 选择年龄大于等于18并且gender为ture
    db.stu.find({age:{$gte:18},gender:ture})

  • 选择年龄是16,18,20 并且hometown为蒙古 或者gender 为ture
    db.collection_name.find({$or:[{age:{$in:[16,18,20]},hometown:"蒙古"},{gender:true}]})

支持正则表达式(两种方式)

  1. 使用 /xxx/
    • db.collection_name.find({sku:/^a/}) 查找sku字段中以a开头的
    • db.collections_name.find({sku:/9$/})查找sku字段中以9结尾的
  2. $regex 编写正则 值必须时字符串
    • db.collection_name.find({sku:{$regex:"^a"}})查找sku字段中以a开头的
    • db.collections_name.find({sku:{$regex:"9$""}})查找sku字段中以9结尾的

limt skip

  1. 方法limit(): 用于读取指定数量的文档db.集合名称.find().limit(NUMBER)
    • db.collection_name.find().limit(2)取两条
  2. 方法skip(): 用于跳过指定数量的文档db.集合名称.find().skip(NUMBER)
    • db.collection_name.find().skip(2)跳过两条
  3. 连用
    • db.collection_name.find().limit(2).skip(2)先取两页再跳过2条
    • db.collections_name.find().skip(2).limi(2)先跳两页,再取2条 —–比较高效常用

sort排序

  • db.collections_name.find({}).sort({name:1,gender:-1})1为升序,-1为降序

统计 count

  • db.collections_name.find().count()
  • db.collections_name.count({gender:true})统计geder:true的个数

去重distinct

  • db.collections_name.distinct("去重字段",{条件})
  • db.collections_name.distinct("hometown",{gneder:true,age:{$gt:18}})
    • 给hometown字段去重,并且gender为true ,age大于18的
    • 返回的是一个列表

聚合

  • 是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤等功能,然后经过一系列的处理,输出相应的结果
  • db.collections_name.aggregate(管道:{表达式})

常用管道

  • $group将文档分组,可用于统计结果
  • $match过滤,输出符合条件的文档
  • $project修改文档的结构,如:重命名,增加,删除字段,创建统计结果
  • $sort 将文档排序后,输出
  • $limt 限制聚合管道返回的档数,取几条
  • $skip跳过指定数量的文档, 并返回余下的文档
  • $unwind将数组类型的字段进行拆分

表达式

  • 处理输出文档并输出
  • 语法:表达式:'$列名' {$..:{}}
  • 常用表达式:
  • sum s u m : 计 算 总 和 , sum:1 表示以1倍计数 表示把每一条数据当作1来计算
  • $avg: 计算平均值
  • $min: 获取最小值
  • $max: 获取最大值
  • $push: 在结果文档中插入值到一个数组中
  • $first: 根据资源文档的排序获取第1个文档数据
  • $last: 根据资源wenwen档的排序获取最后1个文档数据

连用

  1. $group

    • 按照一个字段分组
    • db.stu.aggregate({$group:{_id:"$hometown",age_sum:{$sum:"$age"}}})
    • 按照两个字段分组
    • db.stu.aggregate({$group:{_id:{hometown:"$hometown",name:"$name"},sum:{$sum:1}}})
    • 不分组,统计整个文档,将id设为null
    • db.stu.aggregate({$group:{_id:null,count:{$sum:1}}})
    • $match
      • db.col.aggragate({match:{age:{ match:{age:{ gt:18}}})
      • 过滤
    • $project
    • db.col.aggragate({project:{_id:0,name:1,new_country:" project:{_id:0,name:1,new_country:" country”}})
    • $sort
    • db.col.aggragate({$sort:{name:1}})
    • $limit
    • db.col.aggragate({$limit:20})
    • $skip
    • db.col.aggragate({$skip:20})
    • $unwind
    • db.col.aggragate({ unwind:" u n w i n d :" size”})
    • 属性 值为false表示丢弃属性值为空的⽂档属性preserveNullAndEmptyArrays值为true表示保留属性值为空的⽂档用法:
    • db.col.aggragate({unwind:{path:" unwind:{path:" size”,perserveNullandEmptyArray:true}})
    db.stu.find()
    { "_id" : ObjectId("5a0401d5507a7101e4eaa600"), "name" : "郭靖", "hometown" : "蒙古", "age" : 20, "gender" : true }
    { "_id" : ObjectId("5a0401d6507a7101e4eaa601"), "name" : "⻩蓉", "hometown" : "桃花岛", "age" : 18, "gender" : false }
    { "_id" : ObjectId("5a0401d6507a7101e4eaa602"), "name" : "华筝", "hometown" : "蒙古", "age" : 18, "gender" : false }
    { "_id" : ObjectId("5a0401d6507a7101e4eaa603"), "name" : "⻩药师", "hometown" : "桃花岛", "age" : 40, "gender" : true }
    { "_id" : ObjectId("5a0401d6507a7101e4eaa604"), "name" : "段誉", "hometown" : "⼤理", "age" : 16, "gender" : true }
    { "_id" : ObjectId("5a0401d6507a7101e4eaa605"), "name" : "段王爷", "hometown" : "⼤理", "age" : 45, "gender" : true }
    { "_id" : ObjectId("5a0401d7507a7101e4eaa606"), "name" : "洪七公", "hometown" : "华⼭", "age" : 18, "gender" : true }
    
      db.stu.aggregate({$group:{_id:"$hometown",age_sum:{$sum:"$age"}}}) 将属于华山的年龄想加,属于大理的年龄相加
    { "_id" : "华⼭", "age_sum" : 18 }
    { "_id" : "⼤理", "age_sum" : 61 } 
    

平均值


db.stu.aggregate({$group:{_id:"$hometown",avg:{$avg:"$age"}}})
{ "_id" : "华⼭", "avg" : 18 }
{ "_id" : "⼤理", "avg" : 30.5 }
{ "_id" : "桃花岛", "avg" : 29 }
{ "_id" : "蒙古", "avg" : 19 }

统计

  • 将hometown 分组,,然后统计

    db.stu.aggregate({$group:{_id:"$hometown",sum:{$sum:1}}})
    { "_id" : "华⼭", "sum" : 1 }
    { "_id" : "⼤理", "sum" : 2 }
    { "_id" : "桃花岛", "sum" : 2 }
    { "_id" : "蒙古", "sum" : 2 }

动手

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

unwind

-将⽂档中的某⼀个数组类型字段拆分成多条, 每条包含数组中的⼀个值
语法:db.集合名称.aggregate({ unwind: u n w i n d : ′ 字段名称’})

  • db.t2.insert({_id:1,item:’t-shirt’,size:[‘S’,’M’,’L’]})
    db.t2.aggregate({ unwind: u n w i n d : ′ size’})结果如下:

    { "_id" : 1, "item" : "t-shirt", "size" : "S" }
    { "_id" : 1, "item" : "t-shirt", "size" : "M" }
    { "_id" : 1, "item" : "t-shirt", "size" : "L" }

投影

  • 返回特定的字段
  • db.collection_name.find({条件},{name:1,_id:0})
  • _id 不需要显示的时候,值为0,其他字段不需要的时候,不写即可显示时值为1
  • db.collections_name.find({条件},{name:1,_id:0}) 显示name 不显示其他字段,不需要id时就爱那个id设为0

统计个数

  • db.collection_name.find({条件}).count()
  • db.collection_name.count({条件})

去重

  • db.stu.distinct(“hometown”,{gender:true,age:{$gt:18}})
  • 返回数组

索引

  1. 创键索引
    • db.colllectons_name.ensureIndex({属性:1})语法:db.集合.ensureIndex({属性:1}),1表示升序, -1表示降序具体操作:`db.t1.ensureIndex({name:1})“
  2. db.collection_name.creatreIndex({属性:1}).explain('executionStats')explain(‘executionStats’)查看查询的时间
  3. 创建唯一索引
    • db.collections_name.ensureindex({name:1},{"unique":true})
  4. 创建联合索引——去重一般用三个字段
    • db.collection_name.ensureindex({name:1,age:1})
  5. 查看索引
    • db.collection_name.getindexes()
  6. 删除索引
    • db.collection_name.dropindex()

数据去重

  • 数据库建立索引,需要建立联合索引,通过数据库来实现数据的自动去重
  • 根据url地址去重,把url地址存在redis的集合中,后续新来一个url地址,判断他是否存在redis中,不存在才抓取
    • url对应的响应不会变化的时候
  • 使用sha1加密数据(可以选择加密某些字段),把得到的结果存入redis的集合中,后续新抓到的数据同样的方式进行加密,判断得到的值在redis的集合中是否存在,存在就更新,不存在就插入
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值