返回顶部
首页 > 资讯 > 数据库 >MongoDB(3): 查询
  • 470
分享到

MongoDB(3): 查询

2024-04-02 19:04:59 470人浏览 独家记忆
摘要

一、普通查询find方法语法:  find([条件,需显示的字段]);注意:  1、如果没有条件,则查询全部  2、如果没有显示指定_id字段隐藏,则默认会显示,显示指定隐藏,

一、普通查询

find方法语法:

  find([条件,需显示的字段]);

注意:

  1、如果没有条件,则查询全部

  2、如果没有显示指定_id字段隐藏,则默认会显示,显示指定隐藏,如:find({},{"_id":0});

1.1、查看集合中所有的文档

命令:db.集合名称.find();

MongoDB(3): 查询

1.2、查看集合中第一个文档

命令:db.集合名称.findOne({条件对象});

MongoDB(3): 查询

1.3、指定需要返回的键

在find方法的第二个参数进行指定。默认情况下,始终会返回”_id”,可以通过设置字段为0来表示不返回这个字段。

MongoDB(3): 查询

二、条件查询

find方法语法:

  find([条件,需显示的字段]);


在find方法里面加入条件数据即可,find方法的第一个参数就是。

注意:条件数据必须是常量值,不能是另外的字段的数据


1:比较操作

  $lt:小于

  $lte:小于等于

  $gt:大于

  $gte:大于等于

  $ne:不等于

 如:a、age小于20

  > db.test1.find({"age":{$lt:20}});

    b、age小于20,大于10

  > db.test1.find({"age":{$lt:20,$gt:10}});

2:$and:包含多个条件,他们之间为and的关系

> db.test1.find({$and:[{"userId":2},{"username":"lisi"}]});

 等价于下面:

> db.test1.find({"userId":2,"username":"lisi"});

3:$or :包含多个条件,他们之间为or的关系 ,$nor相当于or取反

 操作方式与$and差不多

4:$not:用作其他条件之上,取反

> db.test1.find({"userId":{$not:{$ne:3}}});
> db.test1.find({"userId":{$not:/1/}});

5:$mod:将查询的值除以第一个给定的值,如果余数等于等二个值则匹配成功

> db.test1.find({"age":{$mod:[100,3]}});

说明:

  age除以100,如果余数为3,则满足条件

6:$in :查询一个键的多个值,只要键匹配其中一个即可 , $nin为不包含

> db.test1.find({"userId":{$in:[1,2]}});

7:$all:键需要匹配所有的值

> db.test1.find({"userId":{$all:[1,2]}});

8:$exists:检查某个键是否存在,1表示存在,0表示不存在

> db.test1.find({"userId":{$exists:1}});

9:null类型:不仅能匹配键的值为null,还匹配键不存在的情况

> db.test1.find({"age":null});

三、正则表达式

mongoDB使用Perl兼容的正则表达式(PCRE),比如:

db.users.find({“name”:/sishuok/i}); 又比如:

db.users.find({“name”:/^sishuok/});

四、查询数组

1:单个元素匹配,就跟前面写条件一样,{key:value}

> db.test1.find({"score":5});

2:多个元素匹配,使用$all, {key:{$all:[a,b]}},元素的顺序无所谓

> db.test1.find({"score":{$all:[7,2]}});

3:可以使用索引指定查询数组特定位置, {“key.索引号”:value}

> db.test1.find({"score.1":7});

4:查询某个长度的数组,使用$size

> db.test1.find({"score":{$size:5}})

5:指定子集,使用$slice,正数是前面多少条,负数是尾部多少条,也可以指定偏移量和要返回的元素数量,比如:$slice:[50,10]

> db.test1.find({},{"score":{$slice:2}});

指定偏移量和要返回的元素数量,比如:偏移量1,返回两个元素:

> db.test1.find({},{"score":{$slice:[1,2]}});

6:可以使用$来指定符合条件的任意一个数组元素,如:{”users.$”:1}

> db.test1.find({"score":{$in:[2,5]}},{"score.$":1});

7:$elemMatch:要求同时使用多个条件语句来对一个数组元素进行比较判断

> db.test1.find({"score":{$gt:5,$lt:4}});
{ "_id" : ObjectId("5925a29652b61a20c53Dfd48"), "score" : [ 7 ] }
>

说明:上面语句并不是我们想要的,“大于5,小于4”,应该是不存在的,这里如果想让其生效,相当于and,则使用:$elemMatch

> db.test1.find({"score":{$elemMatch:{$gt:5,$lt:4}}});
>

五、查询内嵌文档

1:查询整个内嵌文档与普通查询是一样的

 MongoDB(3): 查询

2:如果要指定键值匹配,可以使用“.” 操作符,比如:{“name.first”:”a”,“name.last”:”b”}

> db.test1.find({"user.id":1});
{ "_id" : ObjectId("5925a2a552b61a20c53dfd49"), "user" : { "id" : 1, "username" : "zhangsan" } }
>

3:如果要正确的指定一组条件,那就可能需要使用$elemMatch,以实现对内嵌文档的多个键进行匹配操作

 只有内嵌文档中的有key的值是数组

注意:内嵌文档的查询必须要整个文档完全匹配

4:$where查询

在查询中执行任意的javascript,通过编程来解决查询的匹配问题,方法返回boolean值。

> function t1() {
... for(var a in this) {
...  if (a.userId==2) {
...   return true;
...  }
... }
... return false;
... };
> db.test1.find({$where:t1});

如果返回true,文档作为结果的一部分被返回;如果为false,则不会返回。

使用的时候:db.users.find({"$where":t1});

注意:$where性能较差,安全性也是问题,所以不到万不得已,不要使用


还可以这样:

> db.test1.find({$where:"this.userId==1"});

六、分页与其它相关

6.1、查询记录条数的命令:count

1:直接使用count()的话,得到的是整个记录的条数

> db.test1.find().count();
4

2:如果要获取按条件查询后记录的条数,需要指定count(true或者非0的数)

> db.test1.find().limit(2).count();
4
> db.test1.find().limit(2).count(1);
2
>

6.2、限制返回的记录条数的命令:limit(要返回的条数)

> db.test1.find().limit(2);
{ "_id" : ObjectId("5925a29652b61a20c53dfd48"), "userId" : "1", "age" : 13, "score" : [ 7, 7, 2, 5, 4 ] }
{ "_id" : ObjectId("5925a2a552b61a20c53dfd49"), "user" : { "id" : 1, "username" : "zhangsan" } }
>

6.3、限制返回的记录条数起点的命令:skip(从第几条开始返回)

> db.test1.find().skip(2).limit(2);
{ "_id" : ObjectId("5926b15e52b61a20c53dfd4a"), "user" : { "id" : 2, "username" : "lisi" } }
{ "_id" : ObjectId("5926b6ce31e6d30b1b5084cd"), "userId" : 5, "name" : "zhangsan" }
>

6.4、排序的命令:sort({要排序的字段:1为升序,-1为降序})

> db.test1.find().sort({"userId":1});

对多个字段进行排序

> db.test1.find().sort({"userId":1,"username":1});

MonGoDB处理不同类型的数据是有一定顺序的,有时候一个键有多种类型的值,其排序顺序是预先定义好的,从小到大如下:

(1)最小值 (2)null (3)数字 (4)字符串

(5)对象/文档 (6)数组 (7)二进制数据 (8)对象id

(9)布尔类型 (10)日期型 (11)时间戳 (12)正则表达式

(13)最大值

6.5、分页查询:组合使用limit,skipt和sort

数据量比较小时,建议使用;当数据量比较大时,建议使用其他方式来分页,比如采用自定义的id,然后根据id来分页

skipt的检索方式:如果有100条数据,我想要第59条,那么skipt也会检索出前面58条,只是在第59条时返回。

6.6、查询给定键的所有不重复的数据,命令:distinct

语法:db.runCommand({“distinct”:集合名,“key”:”获得不重复数据的字段”});

> db.runCommand({"distinct":"test1","key":"userId"});
{ "values" : [ "1", 5 ], "ok" : 1 }

七、游标

1:获取游标,示例如下:

> var c = db.test1.find();

2:循环游标,可以用集合的方式,示例如下:

> while(c.hasNext()){
... printJSON(c.next());
... }

3:也可以使用forEach来循环,示例如下:

> c.forEach(function(obj){ 
... printjson(obj); 
... });

效果:

MongoDB(3): 查询

八、存储过程

1:MongoDB的存储过程其实就是个自定义的js函数

> var addf = function(a,b){
... return a+b;
... }
>

2:使用db.system.js.save({“_id”:名称,value:函数})存储函数;

> db.system.js.save({"_id":"myF","value":addf});

3:可以通过如下命令查看:db.system.js.find();

MongoDB(3): 查询

4:可以通过如下命令调用:db.eval(名称);

MongoDB(3): 查询


注意:尽量避免使用游标与游标

您可能感兴趣的文档:

--结束END--

本文标题: MongoDB(3): 查询

本文链接: https://lsjlt.com/news/42801.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 3.mongodb 查询
    MongoDB 查询文档使用 find() 方法。find() 方法以非结构化的方式来显示所有文档。语法格式如下:db.collection.find(query, projection)query :可选...
    99+
    2024-04-02
  • MongoDB(3): 查询
    一、普通查询find方法语法:  find([条件,需显示的字段]);注意:  1、如果没有条件,则查询全部  2、如果没有显示指定_id字段隐藏,则默认会显示,显示指定隐藏,...
    99+
    2024-04-02
  • 查询MongoDB oplog.rs
    oplog是Capped Collection,默认分配5%的空闲磁盘空间。来看下oplog.rs的样子:rs_test:SECONDARY> use local switched...
    99+
    2024-04-02
  • MongoDB的查询
        MongoDB使用find来查询,不指定任何参数说明是对整个集合的文档查询。find查询    指定返回的键 ...
    99+
    2024-04-02
  • mongodb慢查询
    开启 Profiling 功能1. 直接在启动参数里直接进行设置      启动MongoDB时加上–profile=1 即可     还可以慢查...
    99+
    2024-04-02
  • golang mongodb 查询
    Golang与MongoDB的联合使用,成为了很多开发人员的选择。这篇文章将介绍如何在Golang中使用MongoDB进行查询操作。简介MongoDB是一个流行的开源文档数据库,它被广泛地用于各种应用程序中。在Golang中,可以使用一些流...
    99+
    2023-05-21
  • mongodb 之慢查询
    mongodb中慢查询日志 1.开启查询日志.(1)动态开启,可以选择性的对指定DB开启慢查询日志,但服务器重启后慢查询日志又要人工手动开启。db.setProfilingLevel(1,300)...
    99+
    2024-04-02
  • mongodb高级查询
      MongoDB 的逻辑结构是一种层次结构。主要由文档(document)、集合(collection)、数据库(database)这三部分组成的。逻辑结构是面向用户的用户使用MongoDB 开...
    99+
    2024-04-02
  • mongodb id 查询golang
    MongoDB是一个非常流行的文档数据库,在现代互联网应用程序中广泛使用。在使用MongoDB时,有时需要使用唯一的ID来查询文档。这个唯一的ID是MongoDB中的_object ID_。在本文中,我们将探讨如何在Go中使用MongoDB...
    99+
    2023-05-15
  • mongodb之查询篇-查询选择器
    引用 https://docs.mongodb.com/manual/reference/operator/query/ 查询选择器: $eq 匹配等于指定值的值。 $gt 匹配大于指定值...
    99+
    2024-04-02
  • MongoDB慢日志查询
    MongoDB system.profile前言Part1:写在最前    说到MongoDB的慢日志分析,就不得不提到profile分析器,profile分析器将记...
    99+
    2024-04-02
  • MongoDB多条件查询
    1.查看集合 show collections2.向集合中添加数据 db.runoob.insertMany([ { 'title':'data1', 'u...
    99+
    2024-04-02
  • mongodb慢查询分析
    1.用慢查询日志(system.profile)找到超过500ms的语句  mongos>db.setProfilingLevel(1,500) 2.然后再通过.explain()...
    99+
    2024-04-02
  • 过滤查询 mongodb Golang
    php小编西瓜今天要为大家介绍的是关于过滤查询mongodb的Golang实现。在使用mongodb数据库进行数据查询时,我们经常需要对查询结果进行过滤,以满足特定的条件。Golang...
    99+
    2024-02-12
  • 【MongoDB学习笔记17】MongoDB的查询:find中的数组查询
    db.post.find()    { "_id" : ObjectId("54a530c3ff0df3732bac1681"), "i...
    99+
    2024-04-02
  • 【MongoDB学习笔记18】MongoDB的查询:find查询内嵌文档
    查询内嵌文档和查询普通文档完全相同;例如:> db.post.find()    { "_id" : ObjectId("54ac...
    99+
    2024-04-02
  • hibernate HQL 模糊查询 3
    以下是用 hibernate的HQL(面向对象的查询语言)实现模糊查询的3种方式,其中方式一是这三中方式中最理想的方式,至少方式一可以有效的防止由于查询条 件中需要参数的增多导致的代码长度太长出现代码折行的情况(代码太长会给后期的维护和测试...
    99+
    2023-01-31
    模糊 hibernate HQL
  • mongodb高级聚合查询
      https://www.cnblogs.com/zhoujie/p/mongo1.html mongodb高级聚合查询     在工作中会经常遇到一些mongodb的聚合操作,特此总结下。mongo存储的可以是复杂类型,比...
    99+
    2016-06-26
    mongodb高级聚合查询
  • mongodb 常用查询用户
    一、查询 find方法   db.collection_name.find();   查询所有的结果:   select * from users;   db.users.find();   指定返回那些列(键):   ...
    99+
    2020-01-07
    mongodb 常用查询用户
  • MongoDB入门6——查询(二)
     3.查询中null的处理         null的匹配非常有意思:null不仅仅会匹配到指定键的值确实等于null的文档,...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作