Mongodb数据查询 | Mongodb

1.基本查询
    ①方法find():查询
        db.集合名称.find({条件文档})
    ②方法findOne():查询,只返回第一个
        db.集合名称.findOne({条件文档})
    ③方法pretty():将结果格式化
        db.集合名称.find({条件文档}).pretty()
2.比较运算符
    # 等于,默认是等于判断,没有运算符
    # 小于,$lt   less-than
    # 小于或等于,$lte   less-than,equal
    # 大于,$gt    greater-than
    # 小于或等于,$gte    greater-than,equal
    # 不等于,$ne    not equal
        db.collection2.find({name:‘郭靖‘})
        db.collection2.find({age:{$gte:18}})
3.逻辑运算符
    ①逻辑与
        # 默认是逻辑与的关系
        # 例:查询年龄大于或等于18,并且性别为true的学生
            db.collection2.find({age:{$gte:18}, gender:true})
    ②逻辑或
        # 使用$or,值为数组,数组中每个元素为json
        # 例:查询年龄大于18,或性别为false的学生
            db.collection2.find({$or:[{age:{$gt:18}},{gender:false}]})
        注意点:find() >> 或条件下的{} >> $or[ ] >>
        >>  {条件a},{条件b} >> {域:{ 逻辑符判断} }
    ③或、与共用
        # 例:查询年龄大于18或姓名是郭靖,并且性别为男生
            db.collection2.find( {$or:[ {age:{$gt:18} },{name:‘郭靖‘} ],gender:true} )
4.范围运算符
    # $in|$nin
    # 例:查询年龄为18,28的学生
        db.collection2.find( {age:{$in:[18, 28] } } )
    # 这里要注意了,最大与最小都需要表中含有这几个数
5.支持正则表达式
    # 使用 // 或 $regex 编写正则表达式
    # 例:db.collection2.find( {name:/^黄/} )
        db.collection2.find( {name:{$regex:‘^黄‘} } )
6.自定义查询
    # 使用$where后面写一个函数,返回满足条件的数据
    # 例:查询大于30岁的学生
        db.collection2.find(
        {
        $where: function(){
        return this.age > 18
        }})
7.Limit和Skip
    ①方法limit():读取指定数量的文档
        # db.集合名称.find().limit(NUMBER)
        db.collection2.find().limit(2)
        # 附:如果指定参数则显示集合中的所有文档
    ②方法skip():用于跳过指定数量的文档
        # db.集合名称.find().skip(NUMBER)
        db.stu.find().skip(2)
        # 附:参数NUMBER表示跳过的记录条数,默认为0
    ③limit()与skip()一起使用
        # 不分先后顺序;跳过指定数量文档,再读取指定数量的文档
        # 查询数据
        db.collection1.find().limit(4).skip(5)
        db.collection1.find().skip(5).limit(4)
8.投影
    --选择字段显示数据
        # ①db.集合名称.find({},{ 字段名称:1, ...})
        db.collection2.find({},{name:1, gender:1})
        # ‘1‘:表示显示字段,不设置表示不显示
        # ②特殊:对于_id列默认是显示的,
        # 如果不显示需要明确设置为0
        db.collection2.find({},{_id:0,name:1,gender:1})
9.排序
    --对结果集进行排序
        参数1为升序排列
        参数-1位降序排列
    # db.集合名称.find().sort({字段:1....})
    # --根据性别降序,再根据年龄升序
        db.collection2.find().sort({gender:-1,age:1})
10.统计个数
    ①方法count():用于统计结果集中文档条数
        1.db.集合名称.find({条件}).count()
        db.collection2.find({gender:true}).count()
        # --统计男生人数

        2.db.集合名称.count({条件})
        db.collection2.count({age:{$gt:20}, gender:true})
        # --统计年龄大于20的男生人数
11.消除重复
    ①方法distinct():对字段数据进行去重,提取
    --db.集合名称.distinct(‘去重字段‘,{条件})
    db.collection2.distinct(‘hometown‘,{age:{$gt:18}})
    # 查询年龄大于18岁的学生,来自哪些省份

# 4.聚合查询
1.基本语法
    --语法
    db.集合名称.aggregate( {管道: {表达式} } )
    附:
        1.管道:在Unix和Linux中一般用于将当前命令的
        输出结果作为下一个命令的输入
        2.表达式:处理输入文档并输出
2.常用表达式
    $sum: 计算综合,$sum:1 表示以一倍计数
    $avg: 计算平均值
    $min: 获取最小值
    $max: 获取最大值
    $push: 在结果文档中插入值到第一个文档数据
    $first: 根据资源文档的排序获取第一个文档数据
    $last: 根据资源文档的排序获取最后一个文档数据
3.常用管道
    ①$group
        --将集合中的文档分组,可用于统计结果
        --_id表示分组的依据,使用某个字段的格式为‘$字段‘
            # 统计男生、女生的总人数
            db.stu.aggregate(
                {$group:
                    {
                        _id:‘$gender‘,
                        counter:{$sum:1}
                    }
                }
            )
        --透视数据
            # 统计学生性别及学生姓名
            db.stu.aggregate(
                {$group:
                    {
                        _id:‘$gender‘,
                        name:{$push:‘$name‘}
                    }
                }
            )
        --使用$$ROOT可以将文档内容加入到结果集的数组中
            db.stu.aggregate(
                {$group:
                    {
                        _id:‘$gender‘,
                        name:{$push:‘$$ROOT‘}
                    }
                }
            )
    ②$match
        --修改输入文档的结构,如重命名、增加、删除字段、创建计算结果
        --用于过滤数据,只输出符合条件的文档
        --使用MongoDB的标准查询操作
        # 查询年龄大于20的学生
        db.stu.aggregate(
            {$match:{age:{$gt:20}}}
        )

        # 查询年龄大于20的男生、女生人数
        db.stu.aggregate(
            {$match:{age:{$gt:20}}},
            {$group:{_id:‘$gender‘,counter:{$sum:1}}}
        )
    ③$project
        --修改输入文档的结构,
           如重命名、增加、删除字段、创建计算结果
        # 查询学生的姓名、年龄
        db.stu.aggregate(
            {$project:{_id:0,name:1,age:1}}
        )

        # 查询男生、女生人数,输出人数
        db.stu.aggregate(
            {$group:{_id:‘$gender‘,counter:{$sum:1}}},
            {$project:{_id:0,counter:1}}
        )
    ④$sort
        --将输入文档排序后输出
        # 查询学生信息,按年龄升序
        b.stu.aggregate({$sort:{age:1}})

        # 查询男生、女生人数,按人数降序
        db.stu.aggregate(
            {$group:{_id:‘$gender‘,counter:{$sum:1}}},
            {$sort:{counter:-1}}
        )
    ⑤$limit和$skip
        --$limit
        # 限制聚合管道返回的文档数
        # 查询2条学生信息
            db.stu.aggregate({$limit:2})

        --$skip
        # 跳过指定数量的文档,并返回余下的文档
        # 查询从第3条开始的学生信息
            db.stu.aggregate({$skip:2})

        # 统计男生,女生人数,按人数升序,取第2条数据
            db.stu.aggregate(
                {$group:{_id:‘$gender‘, counter:{$sum:1}}}
                {$sort:{counter:1}}
                {$skip:1}
                {$limit:1}
            )
    ⑥$unwind字段拆分查询
        --语法
        --文档中一个数组字段含有多个值
        --根据字段下的值拆分多条
        --每条包含数组中的一个值

        --db.集合名称.aggregate({$unwind:‘$字段名称‘})
            # $unwind聚合方法下含有两个属性:
                path:‘$字段名称‘
                preserveNullAndEmptyArrays:<布尔值>
            # 不填写属性,默认表示<布尔值>为false
            # 且不用标记属性名
        --构造数据
            db.t3.insert([
            { "_id" : 1, "item" : "a", "size": [ "S", "M", "L"] },
            { "_id" : 2, "item" : "b", "size" : [ ] },
            { "_id" : 3, "item" : "c", "size": "M" },
            { "_id" : 4, "item" : "d" },
            { "_id" : 5, "item" : "e", "size" : null }
            ])
        --查看查询结果,显示对空数组,无字段,null的文档
            db.t3.aggregate( { $unwind:{ path:‘$size‘, preserveNullAndEmptArrays:true}})

        --查看查询结果,不显示空数组,无字段,null的文档
            db.t3.aggregate({$unwind: ‘$size‘})  相当于:
            db.t3.aggregate({$unwind:{path:‘$size‘, preserveNullAndEmptyArrays:false}})

  

原文地址:https://www.cnblogs.com/meijiemu/p/9198472.html

时间: 2024-10-08 19:15:08

Mongodb数据查询 | Mongodb的相关文章

MongoDB数据查询

启动MongoDB:sudo service mongodb start,mongo 经测试,键可加引号也可不加,但是值一般要加引号,数值类型除外 MongoDB区分大小写,命名通常采用驼峰式命名法 MongoDB在使用数据库,插入集合等情况下,若数据库/集合不存在将自动创建 数据查询find() db.<集合名>.find({<键名>:<值>,...}) 格式化结果集:后加.pretty()即db.<CollectionName>.find({key:'v

4.Mongodb数据查询2

1.limit &skip (1)Limit 方法limit():用于读取指定数量的文档 语法: db.集合名称.find().limit(NUMBER) 参数NUMBER表示要获取文档的条数 如果没有指定参数则显示集合中的所有文档 例1:查询2条学生信息 db.stu.find().limit(2) (2)skip 方法skip():用于跳过指定数量的文档 语法: db.集合名称.find().skip(NUMBER) 参数NUMBER表示跳过的记录条数,默认值为0 例2:查询从第3条开始的学

MongoDB(课时5 数据查询)

3.4.2 数据查询 MongoDB数据库里面,对于数据库查询的支持非常到位,有关系运算,逻辑运算,数组运算,正则运算等. 对于数据的查询操作核心语法: db.集合名称.find({查询条件} {设置显示的字段}) 范例:没查询条件 db.info.find() 范例:有查询条件,查询出url为"www.mldn.cn"的数据 db.info.find({"url" : "www.mldn.cn"}) 进行数据查询的时候是按照JSON的形式设置的

MongoDB监控三 MongoDB自带监控方法

REST接口 MongoDB提供一个简单的REST接口可用于配置监控和告警脚本和其他一些管理任务. 可以通过在命令行添加 --rest参数或在配置文件加上rest=true开启REST接口支持. 具体可以参见文档http://docs.mongodb.org/ecosystem/tools/http-interfaces/ HTTP接口 MongoDB提供一个简单的HTTP接口,如当前MongoDB实例运行的端口是28018,那么可以通过http://127.0.0.1:38018 访问 具体可

从mongodb中查询数据

连接mongodb: public class GenericMga{ private DB db; public DB getDB(){ return this.db; } public void setDB(DB db){ this.db = db; } } DBCollection coll = null; coll=getDB().getCollection("collName");//保存时候的名字相当于MySQL的表名 创建查询条件: BasicDBObject query

MongoDB源码分析——mongod数据查询操作

源码版本为MongoDB 2.6分支 Edit mongod数据查询操作 在mongod的初始化过程中说过,服务端接收到客户端消息后调用MyMessageHandler::process函数处理消息. class MyMessageHandler : public MessageHandler { public: ... virtual void process( Message& m , AbstractMessagingPort* port , LastError * le) { while

C#多线程更新,查询MongoDB数据

对多线程一直在用,但是从来没去深入研究过注意的事项,包括和锁的配合也是一知半解没有真正理解锁(lock)的用法. 这次在做数据分析是需要将访问的url中host部分记录,如果已经存在就直接匹配id,没有就新增.为了提升效率马上想到的就是多线程,因为程序自身比较复杂,就大篇幅贴代码了. 主要思路:lock是对实例进行上锁的,如果线程中每个线程都创建了不同的实例那lock的意义也就随之不存在. 如果涉及到多层类的引用和传递,那就在进程入口处做一次实例化,需要类的初始化或者调用时,一层层去传递直到业务

在zepplin 使用spark sql 查询mongodb的数据

1.下载zepplin 进入官网下载地址,下载完整tar包. 2.解压 tar zxvf zeppelin-0.7.3.tgz 3.修改配置 新建配置文件 cp zeppelin-env.sh.template zeppelin-env.sh 修改配置文件 vi zeppelin-env.sh # 设置java home 路径 export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-1.b16.el7_3.x86_64/jre # 设

mongodb 模糊查询以及$type使用

mongodb 模糊查询以及$type使用 2012-09-11 14:13:30|  分类: mongodb |  标签: |举报 |字号大中小 订阅 最近有一监控业务,由于数据采集到非数字内容,导致监控图表无法正常显示,所以要找出这部分数据,进行删除,然后开发员从源头更正插入数据库的数据,不再产生非数字内容. 下面举一个例子: 建立测试数据: for(i=1;i<=100;i++){db.test.insert({id:i,content:"test content",nam