MongoDb进阶实践之六 MongoDB查询命令详述补充 MongoDb进阶实践之四 MongoDB查询命令详述

一、引言

         上一篇文章我们已经介绍了MongoDB数据库的查询操作,但是并没有介绍全,随着自己的学习的深入,对查询又有了新的东西,决定补充进来。如果大家想看上一篇有关MongoDB查询的文章,可以点击这里《MongoDb进阶实践之四 MongoDB查询命令详述》,第一篇文章详细介绍了有关MongoDB查询的有关命令和操作符。废话不多说,今天主要的任务就是把有关MongoDB查询命令的新的东西补充进来,文章的序号,我是接着上一篇文章来的,没有重头来说,这样大家也就知道今天是有关MongoDB查询之四的补充了。好了,马上开始我们今天的写作吧。

二、MongDB查询的详解(补充

          我比较直接,直接上内容,有关查询的每个方法都有示例代码,应该不是很难。大家注意,序号不是从1开始的,因为是补充的,大家可以结合上一篇文章一起来看。

             12、$in 操作符:在一个数组中查询匹配的文档,查询条件的值可以有多个,条件可以满足一个或者多个

                    语法:db.collectionName.find({<key>:{$in:[value1,value2...valuen]}})

                    参数说明:

                       key:要操作的字段名称

                       $in:操作符,在一个数组中选择符合条件的文档

                       value1-n:查询条件要满足的值,可以有多个值,可以满足一个,两个,或者多个

                    $in操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。


                    示例代码:

                //原始数据
                > db.students.find()
                { "_id" : ObjectId(5adb3dbda62a80dd1239bb40"),userName" : lilei",1)">sex1age21addressguangxi" }
                { 5adb3dbda62a80dd1239bb41HanMeiMei018JiangXi5adb3dbda62a80dd1239bb42ZhangFei33HeBei5adb3dbda62a80dd1239bb43GuanYu26ShanXi }


                查询结果
                > db.students.find({":{$in":[]}})
                {  }
                > 



             13、$nin 操作符:和$in操作符相反,选择不符合数组条件的所有文档

                    语法:db.collectionName.find({<key>:{$nin:[value1,value2...valuen]}})

                    参数说明:

                       key:要操作的字段名称

                       $nin:操作符,在一个数组中选择不符合条件的文档

                       value1-n:查询条件要满足的值,可以有多个值,可以满足一个,两个,或者多个

                    $nin操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。


                    示例代码:

                 }

                $nin" }



             14、$and 操作符:该操作符用于连接多个条件,只有当每个条件必须都是为true,整个条件的集合才会返回true,表示条件成立,然后就会返回符合条件的文档

                    语法:db.collectionName.find({$and:[{query1},{query2}...{queryn}]})


                    参数说明:

                       $and:操作符,每个条件都必须返回true,整个条件集合才回返回true;如果有一个条件返回false,整个条件结果就是false。

                       query1-n:具体的查询条件,可以有多个查询条件,只有所有条件返回true,整个条件集合才回返回ture,表示成功。

                    $and操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。


                    示例代码:

               原始数据
               > db.students.find()
               {  }
               {  }

               查询结果
               db.students.find({$and":[{":"},{}]})
               {  }
               > 



             15、$not 操作符:该操作符用于对当前的条件取反,要和其他操作符配合使用。比如,我可以取性别不是男的所有的文档,也可以获取年龄不包含44和55岁的人的文档

                   语法:db.collectionName.find({<key>:{"$not":{"$in":[value1,value2...valuen]}}})

                    参数说明:

                       key:在字段是要进行条件筛选的字段名。

                       $not:操作符,对条件进行取反,通常会和其他操作符配合使用。

                       value1-n:具体需要过滤的值,可以是多个值,$in操作符表示符合这些条件,$not操作符就是对$in操作符的条件取反

                   $not操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果

                    示例代码:

                }



               查询结果,查询年龄不是21和18岁的其他人
               > db.students.find({$not]}}})
               {  }
               > 


             16、$all 操作符:是针对数组字段操作的,可以完成类似模糊查询的效果,并且和字段值的顺序无关。一般Mongodb数组字段的查询,都是精确查询,并且和字段的顺序有关。

                  语法:db.collectionName.find({<key>:{$all:[value1,value2...valuen]}})

                    参数说明:

                       key:要操作的字段名称,并且该字段是数组字段

                       $all:操作符,在一个数组中选择符合条件的文档

                       value1-n:查询条件要满足的值,可以有多个值,可以满足一个,两个,或者多个

                    $all操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。

                    示例代码:

              原始数据
              > db.students.find()
              { frut" : [ applebanana ] }
              {  }
              { 5adb4b5df82775fbd989b8525adb4b83f82775fbd989b859orange ] }
              >

              查询结果  无值
              > db.students.find({]})
              >

              查询结果  增加了$all操作符的,orange是第三个元素
              > db.students.find({$all]}})
              { " ] }

 


             17、$size 操作符:该操作符是根据数组字段元素的个数作为查询条件的,可以理解为查询数组字段中具有number个元素的文档

                   语法:db.collectionName.find({<key>:{$size:number}})

                    参数说明:

                       key:要操作的字段名称,该字段必须是数组字段

                       $size:操作符,根据数组元素个数来作为查询条件

                       number:表示几个元素,不是第几个,可以理解为我们查询数组字段中有number个值的文档

                    $size操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。


                    示例代码:

             原始数据
             > db.students.find()
             {  ] }
             {  }
             {  ] }
             >

             查询结果,查询只有一个元素的文档,没有
             > db.students.find({$size1}})

             查询结果,查询只有2个元素的文档
             > db.students.find({2}})
             {  ] }

             查询结果,查询只有3个元素的文档
             > db.students.find({3 ] }
             > 


             18、$slice 操作符:该操作符可以从数组字段的头部或者尾部获取指定个数的元素的文档

                   语法:db.collectionName.find({query},{<key>:{$slice:number}})

                    参数说明:

                       key:要操作的字段名称,该字段必须是数组字段

                       $slice:操作符,可以从数组的头部或者尾部取指定数量的元素

                       number:这个数字表示要获取的数组字段元素的个数,正负表示从头部还是从尾部来获取

                    $slice操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。


                    示例代码:

              ] }


             查询结果,从头部获取一个元素的文档
             > db.students.find({},1)">$slice查询结果,从尾部获取一个元素的文档
             > db.students.find({},1)">":-" ] }


             19、$elemMatch 操作符:该操作符也是针对数组字段来进行的,我们可以针对数组中的元素做判断,是否满足某一个条件,满足就显示记录,不满足就不做操作。

                   语法:db.collectionName.find({<key>:{$elemMatch:{query}}})


                    参数说明:

                       key:要操作的字段名称,该字段必须是数组字段。

                       $elemMatch:操作符,对数组字段中的元素做判别,看看是否满足特定的条件

                       query:该查询条件是针对数组字段中元素进行操作的。

                    $elemMatch操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果


                    示例代码:

            原始数据
            > db.students.find()
            { 5adb555ca62a80dd1239bb44Bobvalues1,1)">2,1)">3,1)">4,1)">5,1)">6 ] }
            { 5adb5568a62a80dd1239bb45 }
            { 5adb556ea62a80dd1239bb465adb5571a62a80dd1239bb475adb5575a62a80dd1239bb4845adb5578a62a80dd1239bb4955adb557ca62a80dd1239bb4a }


            如果不做限制,数组字段和数字字段都查出来
            > db.students.find({$gt$lt}})
            { 如果我只想针对数组字段操作,可以这样
            > db.students.find({$elemMatch}}})
            { 6 ] }

 


             20、内嵌文档的查询:如果按一般方式,由于字段结构的不同,查询结果也会有异,如果结构不同,但是内容相同的情况,我们就要使用文档对象的方式来执行查询,摆脱了文档结构的束缚。

                   语法:<outKey>.<innerKey>

                    参数说明:

                       outKey:外部文档(父文档)要操作的字段名称

                       innerKey:内部文档(子文档)要操作的字段名称


                    示例代码:

             db.names.find()
            { 5adb5915a62a80dd1239bb4bname" : { firstNameliulastNamelei } }
            { 5adb5937a62a80dd1239bb4c5adb5944a62a80dd1239bb4dzhangsan5adb5951a62a80dd1239bb4elisi5adb595ba62a80dd1239bb4fwangwu } }



            一般查询:查询结果,大家看好了,其实第一条和第二条两个内容是完全一样的,只是顺序不一样,如果按一般方式查询,只能获取一条记录
            > db.names.find({ } }

            
            文档对象查询:查询结果,大家看好了,其实第一条和第二条两个内容是完全一样的,只是顺序不一样,如果按一般方式查询,只能获取一条记录
            > db.names.find({name.firstNamename.lastName})
            { " } }

             好了,以上就是新增加进来的,以后学了新的东西在更新吧。主要是上班时间也不是很多,主要是靠周末或者晚上,一些东西很容易时间就飞了,时间控制不好,第二天就没精神了。
           
三、总结

           今天就写到这里了,有关查询和更新的内容还很多,今天只是针对MongoDB的查询新增了一些操作符和相关语法。由于时间不是很充裕,所以这个进度,有可能就慢了,慢工出细活,也希望自己能更深入肌理,明白一二,如果有了心得我还会继续更新的。不忘初衷,继续努力吧。
                                                                                     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读752次。关系型数据库关系型数据库是一个结构化的数据库,创建在关系模型(二维表模型)基础上,一般面向于记录SQL语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作主流的关系数据库包括Oracle、Mysql、SQL Server、Microsoft Access、DB2等非关系型数据库NoSQL(nOSQL=Not Only SQL),意思是“不仅仅是SQL”,是非关系型数据库的总称。除了主流的关系型数据库外的数据库,都认为是非关系型主流的NoSQ.._redis是非关系型数据库吗
文章浏览阅读687次,点赞2次,收藏5次。商城系统中,抢购和秒杀是很常见的营销场景,在一定时间内有大量的用户访问商场下单,主要需要解决的问题有两个:1. 高并发对数据库产生的压力;2. 竞争状态下如何解决商品库存超卖;高并发对数据库产生的压力对于第一个问题,使用缓存来处理,避免直接操作数据库,例如使用 Redis。竞争状态下如何解决商品库存超卖对于第二个问题,需要重点说明。常规写法:查询出对应商品的库存,判断库存数量否大于 0,然后执行生成订单等操作,但是在判断库存是否大于 0 处,如果在高并发下就会有问题,导致库存_php库存结余并发
文章浏览阅读1.4k次。MongoTemplate开发spring-data-mongodb提供了MongoTemplate和MongoRepository两种方式访问MongoDB,MongoRepository的方式访问较为简单,MongoTemplate方式较为灵活,这两种方式在Java对于MongoDB的运用中相辅相成。_springboot插入指定的mongodb数据库
文章浏览阅读887次,点赞10次,收藏19次。1.背景介绍1. 背景介绍NoSQL数据库是一种非关系型数据库,它的特点是可以存储非结构化的数据,并且可以处理大量的数据。HBase是一个分布式、可扩展的列式存储系统,它是基于Google的Bigtable设计的。HBase是一个开源的NoSQL数据库,它的核心功能是提供高性能的随机读写访问。在本文中,我们将对比HBase与其他NoSQL数据库,例如Redis、MongoDB、Cass...
文章浏览阅读819次。MongoDB连接失败记录_edentialmechanisn-scram-sha-1
文章浏览阅读470次。mongodb抽取数据到ES,使用ELK内部插件无法获取数据,只能试试monstache抽取mongodb数据,但是monstache需要mongodb replica set 模式才能采集数据。############monstache-compose文件。#replicas set 启动服务。# 默认备份节点不能读写,可以设置。# mydb指的是需要同步的数据库。#登录主mongodb初始化rs。#primary 创建用户。# ip地址注意要修改。# ip地址注意要修改。_monstache csdn
文章浏览阅读913次,点赞4次,收藏5次。storage:fork: trueadmin登录切换数据库注意: use 代表创建并使用,当库中没有数据时默认不显示这个库删除数据库查看表清单> show tables # 或者 > show collections表创建db.createCollection('集合名称', [options])table1字段类型描述capped布尔(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。_mongodb5
文章浏览阅读862次。Centos7.9设置MongoDB开机自启(超全教程,一条龙)_mongodb centos开机启动脚本
文章浏览阅读1.3k次,点赞6次,收藏21次。NoSQL数据库使用场景以及架构介绍
文章浏览阅读856次,点赞21次,收藏20次。1.背景介绍1. 背景介绍NoSQL数据库是一种非关系型数据库,它的设计目标是为了解决传统关系型数据库(如MySQL、Oracle等)在处理大量不结构化数据方面的不足。NoSQL数据库可以处理大量数据,具有高性能、高可扩展性和高可用性。但是,与关系型数据库不同,NoSQL数据库没有固定的模式,数据结构也不一定是表格。在NoSQL数据库中,数据存储和查询都是基于键值对、列族、图形等不同的...
文章浏览阅读416次。NoSQL定义:非关系型、分布式、开放源码和具有横向扩展能力的下一代数据库。由c++编写的开源、高性能、无模式的基于分布式文件存储的文档型数据库特点:高性能、高可用性、高扩展性、丰富的查询支持、可替换已完场文档某个指定的数据字段应用场景:社交场景:使用mongodb存储用户信息游戏场景:用户信息,装备积分物流场景:订单信息,订单状态场景操作特点:数据量大;读写操作频繁;价值较低的数据,对事物性要求不高开源、c语言编写、默认端口号6379、key-value形式存在,存储非结构化数据。_nosql
文章浏览阅读1.5k次,点赞3次,收藏2次。Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: Failed to create socket. at redis.clients.jedis.DefaultJedisSocketFactory.createSocket(DefaultJedisSocketFactory.java:110) at redis.clients.jedis.Connection.connect(Conne_redis.clients.jedis.exceptions.jedisconnectionexception: failed to create so
文章浏览阅读6.5k次,点赞3次,收藏12次。readAnyDatabase(在所有数据库上都有读取数据的权限)、readWriteAnyDatabase(在所有数据库上都有读写数据的权限)、userAdminAnyDatabase(在所有数据库上都有管理user的权限)、dbAdminAnyDatabase(管理所有数据库的权限);:clusterAdmin(管理机器的最高权限)、clusterManager(管理和监控集群的权限)、clusterMonitor(监控集群的权限)、hostManager( 管理Server);_mongodb创建用户密码并授权
文章浏览阅读593次。Redis是一个基于内存的键值型NoSQL数据库,在实际生产中有着非常广泛的用处_搭建本地redis
文章浏览阅读919次。Key 的最佳实践[业务名]:[数据名]:[id]足够简短:不超过 44 字节不包含特殊字符Value 的最佳实践:合理的拆分数据,拒绝 BigKey选择合适数据结构Hash 结构的 entry 数量不要超过 1000(默认是 500,如果达到上限则底层会使用哈希表而不是 ZipList,内存占用较多)设置合理的超时时间批量处理的方案:原生的 M 操作Pipeline 批处理注意事项:批处理时不建议一次携带太多命令。Pipeline 的多个命令之间不具备原子性。_redis高级实战
文章浏览阅读1.2k次。MongoDB 递归查询_mongodb数据库 递归
文章浏览阅读1.2k次。通过实际代码例子介绍:如何通过MongoTemplate和MongoRepository操作数据库数据_springboot操作mongodb
文章浏览阅读687次,点赞7次,收藏2次。首先欢迎大家阅读此文档,本文档主要分为三个模块分别是:Redis的介绍及安装、RedisDesktopManager可视化工具的安装、主从(哨兵)模式的配置。_redis 主从配置工具
文章浏览阅读764次。天下武功,无坚不摧,唯快不破!我的名字叫 Redis,全称是 Remote Dictionary Server。有人说,组 CP,除了要了解她外,还要给机会让她了解你。那么,作为开发工程师的你,是否愿意认真阅读此心法抓住机会来了解我,运用到你的系统中提升性能。我遵守 BSD 协议,由意大利人 Salvatore Sanfilippo 使用 C 语言编写的一个基于内存实现的键值型非关系(NoSQL)..._redis 7.2 源码
文章浏览阅读2k次。MongoDB 的增删改查【1】_mongodb $inc