• mongo 的简单查询语法


    小白的我对MONGO的一些语句搜集用于区别mysql及一些小常识

    pymongo 语法
    按照id进行倒序操作db.news.find().limit(20).sort([("_id",-1)])

    group = {'$group':{"_id":"$region",'count':{'$sum':1}}}
    db.problem.aggregate([group])
    select region,count(*) from problem group by region;

    查找新闻表标题以name 开头,并且不区分大小写
    db.news.find({'title':{'$regex':'^'+name,"$options":'i'}})

    db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
    select by_user, count(*) from mycol group by by_user
    查看所有的数据库:show dbs /show databases
    切换数据库:use db_name
    删除当前的数据库:db.dropDatabase()
    查看集合:show collections
    删除集合:db.集合名称.drop()

    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","in","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}]})
    支持正则表达式(两种方式)
    使用 /xxx/
    db.collection_name.find({sku:/^a/}) 查找sku字段中以a开头的
    db.collections_name.find({sku:/9$/})查找sku字段中以9结尾的
    $regex 编写正则 值必须时字符串
    db.collection_name.find({sku:{$regex:"^a"}})查找sku字段中以a开头的
    db.collections_name.find({sku:{$regex:"9$""}})查找sku字段中以9结尾的
    limt skip
    方法limit(): 用于读取指定数量的文档db.集合名称.find().limit(NUMBER)
    db.collection_name.find().limit(2)取两条
    方法skip(): 用于跳过指定数量的文档db.集合名称.find().skip(NUMBER)
    db.collection_name.find().skip(2)跳过两条
    连用
    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:计算总和,sum:计算总和,sum:1 表示以1倍计数 表示把每一条数据当作1来计算
    $avg: 计算平均值
    $min: 获取最小值
    $max: 获取最大值
    $push: 在结果文档中插入值到一个数组中
    $first: 根据资源文档的排序获取第1个文档数据
    $last: 根据资源wenwen档的排序获取最后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:"unwind:"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 }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    平均值
    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:′unwind:′字段名称’})
    db.t2.insert({_id:1,item:’t-shirt’,size:[‘S’,’M’,’L’]})
    db.t2.aggregate({unwind:′unwind:′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}})
    返回数组
    索引
    创键索引
    db.colllectons_name.ensureIndex({属性:1})语法:db.集合.ensureIndex({属性:1}),1表示升序, -1表示降序具体操作:`db.t1.ensureIndex({name:1})“
    db.collection_name.creatreIndex({属性:1}).explain('executionStats')explain(‘executionStats’)查看查询的时间
    创建唯一索引
    db.collections_name.ensureindex({name:1},{"unique":true})
    创建联合索引——去重一般用三个字段
    db.collection_name.ensureindex({name:1,age:1})
    查看索引
    db.collection_name.getindexes()
    删除索引
    db.collection_name.dropindex()
    数据去重
    数据库建立索引,需要建立联合索引,通过数据库来实现数据的自动去重
    根据url地址去重,把url地址存在redis的集合中,后续新来一个url地址,判断他是否存在redis中,不存在才抓取
    url对应的响应不会变化的时候
    使用sha1加密数据(可以选择加密某些字段),把得到的结果存入redis的集合中,后续新抓到的数据同样的方式进行加密,判断得到的值在redis的集合中是否存在,存在就更新,不存在就插入

    数,并返回剩下的文档数 同时使用时先使用skip在使用limit 使用示例如下: 查询2条学生信息 db.stu.aggregate( {$limit:2} ) 查询从第三条开始的学生信息 db.stu.aggregate( {$skip:3} ) 统计男女生人数,按照人数升序,返回第二条数据 db.stu.aggregate( {$group:{_id:"$gender",counter:{$sum:1}}}, {$sort:{counter:-1}}, {$skip:1}, {$limit:1} )

  • 相关阅读:
    Leetcode Minimum Path Sum
    Leetcode House Robber II
    洛谷 P5375 【[THUPC2019]组合数据结构问题】题解
    洛谷 P1855 【榨取kkksc03】题解
    CF1173A 【Nauuo and Votes】题解
    [NOIP2018D1T1][NOIP2013D1T1][Luogu P5019]铺设道路 题解
    [BZOJ1083][SCOI2005]繁忙的都市 题解
    统计自己洛谷AC题目爬虫
    CF43A Football 题解
    SP2 PRIME1
  • 原文地址:https://www.cnblogs.com/xcsg/p/10260183.html
Copyright © 2020-2023  润新知