MongoDB查询的详细介绍

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: MongoDB查询的详细介绍 一.数据的基本查询:         1.基本查询{              1.查询所有的数据                 db.xx.find()              2.

MongoDB查询的详细介绍

一.数据的基本查询:

        1.基本查询{

             1.查询所有的数据

                db.xx.find()

             2.指定条件查询

                db.xx.find(查询条件)

             3. 只查找符合条件的一个

            db.xx.findOne()

            db.stu.findOne({gender:true}).pretty()

        }

        2.条件运算 $lt $gt $lte $gte $ne

        {

            db.xx.find({字段:{修饰符:值}})

 

             // 取出年龄大于 20岁的人

            db.stu.find(

                {

                  age:{$gt:20}

                }

            )

             // 取出年龄不等于 20岁的

             db.stu.find({age:{$ne:20}})

             

            }

        3.逻辑运算 $and  $or

         db.xx.find(

             {

                 $and:[

                     {条件1},

                     {条件2}

                 ]

             }

         )

              

            1. 默认find的多条件 就是 $and

               //籍贯是 桃花岛 年龄是18岁的

               db.stu.find(

                   {

                    hometown:"桃花岛",

                    age:18

                   }

               )

 

               db.stu.find(

                   {

                       $and:[

                           {hometown:"桃花岛"},

                           {age:18}

                       ]

                   }

               )

              

            2. $or

               // 来自大理 或者是女生的

               db.stu.find(

                   {

                       $or:[

                           {hometown:"大理"},

                           {gender:false}

                       ]

                   }

               )

               

            3. 混合使用

               // 来自桃花岛或者年龄小于45岁 必须是男生

               db.stu.find(

                   {

                       $and:[

                           {

                               $or:[

                                   {hometown:"桃花岛"},

                                   {age:{$lt:45}}

                               ]

                           },

                           {gender:true}

                       ]

                   }

               )

 

               // 来自大理或者来自蒙古   必须男的 年龄大于16

               db.stu.find(

                   {

                       $or:[

                           {hometown:{$in:['大理','蒙古']}},

                           {

                               $and:[

                                   {gender:true},

                                   {age:{$gt:16}}

                               ]

                           }

                       ]

                   }

               )

            }

        4.范围运算符 $in  $nin

            {

               // 不是 桃花岛

               db.stu.find(

                {hometown:{$nin:["桃花岛"]}}

            )

               

               // 取 年龄 18 40  45

               db.stu.find(

                   {age:{$in:[18,40,45]}}

               )

            }

               

          5.正则表达式{

               db.xx.find(

                   {字段:'正则表达式'}

               )

 

               1. /正则/

               db.stu.find(

                   {

                       name:/黄/

                   }

               )

               2.{$regex:"正则"}

               db.stu.find(

                   {

                       name:{$regex:"段"}

                   }

               )

             

               3. 忽略大小写

               3.1 db.stu.find({name:/lily/i})

               3.2 db.stu.find(

                   {

                       name:{$regex:"lcf",

                            $options:"i"}

                   }

               )

            }

 

        6.自定义函数  $where

         db.xx.find(

             {

             $where:带返回值的 匿名函数

             }

         )

            //取年龄 大于20岁的人  age > 20

            db.stu.find(

                {

                    $where:function () {

                        return  this.age > 20

                    }

                }

            )

            

二.查询结果显示

       1.skip 跳过几个显示

       2.limit 允许显示几个

            //跳过两个 显示4个

            db.stu.find().skip(2).limit(4)

 

            db.stu.find().limit(4).skip(2)

            

            注意点:  没有顺序之分

 

       3.投影 显示哪些字段; 显示 true  不显示false

            db.xx.find(

                {查询条件},

                {字段:true}

            )

            db.stu.find(

                {},

                {name:true}

            )

            

       4.sort 排序:  -1降序 1 升序

            // 年龄 排降序, 相同的按照id 降序

            db.stu.find({}).sort({age:-1,_id:-1})

       5.count 统计个数

         //统计所有

          db.xx.count()

        //   根据条件

        db.xx.find().count()

         6.distinct 去重

           // 取出年龄 小于 60岁的; 籍贯

          db.xx.distinct("去重字段",{查询条件})

 

          db.stu.distinct("hometown",{age:{$lt:60}})

三.聚合查询:

        db.xx.aggreagate(

            [

                {管道1},

                {管道2},

                {管道3}

            ]

        )           

            // 多条件的 多件事

                

           1. $group: 分组

                例子:  数据按照 gender性别分组

                db.stu.aggregate(

                    

                        {$group:{_id:"$gender"}}

                    

                )

               

                注意:  表达式: $sum $avg $first $last $max $min  $push

                例子: 数据按照 性别分组 求年龄的平均值

               db.stu.aggregate(

                   {$group:{_id:"$gender",age_avg:{$avg:"$age"}}}

               )

                例子: 按照籍贯分组, 求年龄和

                db.stu.aggregate(

                    {$group:{_id:"$hometown",age_sum:{$sum:"$age"}}}

                )

                

                注意: $push  将分组想取出来的数据 放入到一个列表

                例子:  取出 按照性别分组的 所有人的名字

                db.stu.aggregate(

                    {$group:{_id:"$gender",all_name:{$push:"$name"}}}

                )

               

              2.$match: 查找符合条件的数据 ; find 区别

                    查询功能一样

                    match可以配合管道使用的

 

                   例子: 取出年龄大于20人

                   db.stu.find({age:{$gt:20}})

                   db.stu.aggregate(

                        {$match:{age:{$gt:20}}}

                   )

                   

                    例子: 取出年龄小于40的; 按照性别分组 求年龄平均值($avg)

                   db.stu.aggregate(

                       {$match:{age:{$lt:40}}},

                       {$group:{_id:"$gender",age_avg:{$avg:"$age"}}}

                   )

                   

             3. $project:投影取出部分字段; 显示1  

                   例子: 取出年龄大于20; 按照籍贯分组 求出年龄之和,求年龄平均值; 查看的时候只想看到之和

                   db.stu.aggregate(

                       {$match:{age:{$gt:20}}},

                       {$group:{_id:"$hometown", age_sum:{$sum:"$age"},age_avg:{$avg:"$age"}}},

                       {$project:{age_sum:1,age_avg:1}}

                   )

                   

             4.$sort: 排序 1升序 -1降序

                   例子: 先找 45以下 ;再 安籍贯分组 求平均值, 在 降序, 在投影

                   db.stu.aggregate(

                       {$match:{age:{$lt:45}}},

                       {$group:{_id:"$hometown", age_avg:{$avg:"$age"}}},

                       {$sort:{age_avg:-1}},

                       {$project:{_id:0}}

                   )

                   

 

             //注意点: 管道是有顺序的 不能随意颠倒; 根据需求

           5. $skip  跳过几个查看

            $limit 允许显示几个

 

                   例子: 先跳2个 在显示 4个

                   db.stu.aggregate(

                       {$match:{age:{$lt:60}}},

                       {$skip:2},

                       {$limit:4}

                   )

 

                   db.stu.aggregate(

                    {$match:{age:{$lt:60}}},

                    {$limit:4},

                    {$skip:2}

                )

                   

            6. $unwind :将数据列表 分割  拆分

                  例子:按照性别分组, 求出人的名字 $push

               db.stu.aggregate(

                   {$group:{_id:"$gender", all_name:{$push:"$name"}}},

                   {$unwind:"$all_name"}

               )

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
2月前
|
存储 NoSQL MongoDB
掌握MongoDB索引优化策略:提升查询效率的关键
在数据库性能调优中,索引是提升查询效率的利器。本文将带你深入了解MongoDB索引的内部工作原理,探讨索引对查询性能的影响,并通过实际案例指导如何针对不同的查询模式建立有效的索引。不仅将涵盖单一字段索引,还会探讨复合索引的使用,以及如何通过分析查询模式和执行计划来优化索引,最终实现查询性能的最大化。
|
2天前
|
SQL NoSQL Java
Java使用sql查询mongodb
通过使用 MongoDB Connector for BI 和 JDBC,开发者可以在 Java 中使用 SQL 语法查询 MongoDB 数据库。这种方法对于熟悉 SQL 的团队非常有帮助,能够快速实现对 MongoDB 数据的操作。同时,也需要注意到这种方法的性能和功能限制,根据具体应用场景进行选择和优化。
25 9
|
2月前
|
存储 NoSQL MongoDB
MongoDB 查询分析
10月更文挑战第21天
22 1
|
2月前
|
NoSQL MongoDB 索引
MongoDB 覆盖索引查询
10月更文挑战第21天
36 1
|
2月前
|
SQL NoSQL MongoDB
MongoDB 查询文档
10月更文挑战第15天
36 1
|
6月前
|
NoSQL 定位技术 MongoDB
解锁MongoDB索引的秘密:优化查询效率与应对限制的策略
解锁MongoDB索引的秘密:优化查询效率与应对限制的策略
109 0
|
2月前
|
人工智能 NoSQL 机器人
MongoDB Atlas与YoMio.AI近乎完美适配:推理更快速、查询更灵活、场景更丰富
随着MongoDB的新发布和革新,YoMio.AI的“闪电式发展”值得期待。
|
3月前
|
SQL NoSQL JavaScript
04 MongoDB各种查询操作 以及聚合操作总结
文章全面总结了MongoDB中的查询操作及聚合操作,包括基本查询、条件筛选、排序以及聚合管道的使用方法和实例。
103 0
|
4月前
|
JSON NoSQL MongoDB
MongoDB Schema设计实战指南:优化数据结构,提升查询性能与数据一致性
【8月更文挑战第24天】MongoDB是一款领先的NoSQL数据库,其灵活的文档模型突破了传统关系型数据库的限制。它允许自定义数据结构,适应多样化的数据需求。设计MongoDB的Schema时需考虑数据访问模式、一致性需求及性能因素。设计原则强调简洁性、查询优化与合理使用索引。例如,在构建博客系统时,可以通过精心设计文章和用户的集合结构来提高查询效率并确保数据一致性。正确设计能够充分发挥MongoDB的优势,实现高效的数据管理。
100 3
|
4月前
|
存储 NoSQL MongoDB
【掌握MongoDB】轻松精通MongoDB查询,从基础到高级一网打尽!
【8月更文挑战第24天】在数据驱动的时代,数据库的性能与灵活性对企业至关重要。MongoDB作为一种高性能、无模式的文档数据库,为开发者提供了灵活的数据存储方案。尤其在处理半结构化或多变数据时展现出强大优势。本文重点介绍MongoDB中的查询操作,包括基本查询、条件查询、复杂查询以及字段选择、排序和限制等功能。通过掌握这些基本查询技巧,开发者能够有效从MongoDB中检索数据,支持复杂的业务逻辑。
76 1