`
runfriends
  • 浏览: 229109 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mongo简介——查询

阅读更多

查询符合条件的第一个文档(对于mongo来说不能叫记录了酷

db.COLLECTION_NAME.findOne({},{});

 

查询符合条件的文档,并按照指定条件排序,跳过前面N1个文档,返回最多数量为N2的文档列表

sort skip limit三个函数可选

db.COLLECTION_NAME.find({},{}).sort({}).skip(N1).limit(N2);

 

返回条件的文档数量

db.COLLECTION_NAME.count({});

 

上面三行代码就是mongo的世界里查询语句的全部。

findOne find count sort的参数都包含在花括号里。用mongo的术语来说就是,它们的参数也是一个文档,而且值得一提的是,在mongo的世界里函数参数如果不是文档就是基本类型。在与查询有关的参数里就是skip和limit以整数为参数,一些与重命名集合、创建集合、分片的初始化与管理等函数以字符串为参数。其它绝大部分函数参数是是以文档形式传递。

 

find和findOne的第一个参数是查询条件,第二个参数是指定返回条例查询条件的那些文档里的哪些字段,第二个参数可省略

mongo的文档也就是json对象。不过这些作为函数参数的文档,它们的属性名是有特殊含义的。

 

find和findOne的第一个参数:

第一个参数的属性名是要查询的文档内的属性名,属性的值就是针对这个属性名的查询条件。

假定我们有以下数据库:

use TEST;

//db.createCollection('USER');

db.USER.findOne({name:'Tom',password:'passkey'});

这行代码将从集合USER里面查询属性名有name和password,且值分别是'Tom'和‘passkey'的第一个文档

 

查询参数的属性值如果是简单类型的值,mongo就会像上文一样将查询条件按相等性处理。更复杂的查询将在后续文章介绍。

上文的findOne调用将会把符合条件的文档全部属性都返回,如果我们只需要文档中的一部分属性这个时候查询函数的第二个参数就派上用场了。

db.USER.findOne({name:'Tom',password:'passkey'},{name:1,registTime:1});

这行代码仍然会命中数据库内相同的文档,只是并不会返回被命中文档的全部属性,而是只返回name和registTime这两个属性。

如果把第二个参数替换为{registTime:0},则返回的结果将会包含除registTime以外的所有属性。

之前提到过mongo不是模式严格的数据库,也就是说同一个集合内的文档不一定有相同的属性,有些文档可能包含更多的属性,同名的属性在不同文档里可能是不同的数据类型。

 

假如说USER集合里面有一部分老数据没有registTime,后来由于需求变更新用户都增加了registTime。

如果是在关系数据库里,肯定所有记录都增加了一个registTime字段,而且必须要首先修改数据表定义才行。不过,现在是mongo的世界了。我们可以在需求发生变化的时候,随时修改程序的代码而不必显式修改数据库模式的定义。这样势必就会造成同一个数据集合里有一部分旧数据没有新增的字段。这种情况下,那些没有registTime而又符合查询条件的文档会被怎么处理呢?答案就是这些文档依然会被返回,如果文档中有registTime就返回registTime,如果没有就不返回。换句话说,如果把数据库中的文档属性名看作数学意义上的集合,find*函数的第二个参数的属性名是另一个集合;那么返回的结果集中的文档属性名就是前面两个集合的交集。

 

find函数的两个参数与findOne完全一样。就不多说了。

 

值得一提的是,除非在find*函数的第二个参数显式指定_ID:0,否则_ID属性默认会包含在结果集中。

 

sort的参数

顾名思义,就是针对被命中文档排序。

它的参数是一个文档。文档属性名是要排序的属性,属性的值只能取1或-1,1表示升序,-1表示降序。

 

skip(N1)

它会跳过结果集的前N1个文档,但是它仍然会扫描这N1个文档,因此skip的效率很低。

为保证效率应在调用skip之前使结果尽量的小。

最好的做法是在find函数的第一个参数文档里指定属性,这些属性与sort函数的参数文档里的属性一样,如果是升序排序就指定返回这些属性的值大于上一页的最大值的文档,反之就指定返回它们小于上一页的最小值的文档。用这种方式代替skip。

 

limit(N2)

这是查询语句里面最后调用的函数,意思就是最多返回命中结果集里面的N2个文档。

 

关于复杂的查询条件,比如大于、小于、存在性、空值等比较将在下一篇文章里介绍。

mongo的查询条件甚至还支持正则表达式查询,可以在查询语句里嵌入javascript代码,支持嵌套子文档和数组索引的查询条件等。它也可针对嵌套子文档和数组创建索引。

 

0
0
分享到:
评论

相关推荐

    mongodb_exporter监控 https://github.com/dcu/mongodb_exporter.git 下19年4月的编译结果文件

    mongodb_exporter监控 https://github.com/dcu/mongodb_exporter.git 下19年4月的编译结果文件 编译很麻烦 ,注意修改文件的可执行权限

    php_mongo_5.2.6.6

    PHP为了方便开发者与MongoDB数据库打交道,提供了专门的MongoDB扩展——php_mongo。本文将详细介绍标题为"php_mongo_5.2.6.6"的扩展,它是专为PHP 5.2.6版本设计的一个重要组件。 一、php_mongo扩展简介 php_mongo...

    30分钟学MongoDB系列——Mongo分布式架构篇(简介)

    MongoDB,一款NoSQL数据库管理系统,在业界内以其高效和灵活著称。本文将详细探讨其分布式架构,首先我们会讨论分布式架构与云技术之间的联系,然后分析分布式架构的应用场景,并最终讲述MongoDB如何应用于云存储和...

    MongoVUE可视化工具

    MongoVUE是一个MongoDB在windwos下的客户端管理工具 MongoVUE是一个创新的MongoDB桌面应用Windows操作系统,给你一个优雅的、高度可用的GUI界面来使用MongoDB。...它给你3不同的看法——TreeView,TableView和TextView。

    MongoVUE V1.5.3 破解版

    MongoVUE是一个MongoDB在windwos下的客户端管理工具,是一个创新的MongoDB桌面应用...它给你3不同的看法——TreeView,TableView和TextView。 安装后将Cracked.zip解压替换系统安装的mongovue.exe即可破解完成。

    mongo官方文档v4.0

    在性能方面,4.0版本引入了新的存储引擎——WiredTiger。相比之前的MMAPV1,WiredTiger提供更好的压缩率,降低了存储需求,并且在读写性能上有显著提升。同时,它还支持行级锁定,减少了锁竞争,进一步提高了并发...

    php_mongo.dll 各版本支持php5.6

    各版本支持php5.6" 描述的是关于 PHP 与 MongoDB 集成扩展的一个重要组件——php_mongo.dll 文件,它在不同版本下的兼容性情况,特别是对于 PHP 5.6 版本的支持。这个扩展使得 PHP 能够与 MongoDB 数据库进行交互,...

    mongo本地操作连接工具

    本文将详细介绍"mongo本地操作连接工具"——Robo 3T(原名Robomongo),以及如何使用它来连接和管理MongoDB数据库。 Robo 3T是一款轻量级、跨平台的MongoDB管理工具,支持Windows、Mac OS X和Linux操作系统。它的...

    MongoDB 客户端工具 MongoVue

    MongoVUE是一个MongoDB在windwos下的客户端管理工具 MongoVUE是一个创新的MongoDB桌面应用Windows操作系统,给你一个优雅的、高度可用的GUI界面来使用MongoDB。...它给你3不同的看法——TreeView,TableView和TextView。

    mongo可视化工具

    右侧的查询面板提供了交互式的Mongo Shell,支持编写和执行MongoDB的命令。 6. **其他高级功能**:Robo 3T还提供了数据导入导出、备份恢复、性能监控、脚本编辑执行等功能。例如,你可以使用“文件”菜单中的“导入...

    lua-mongo:用于Lua的MongoDB驱动程序

    当这两种技术结合时,就诞生了“lua-mongo”——一个专门为Lua设计的MongoDB驱动程序,它为Lua开发者提供了与MongoDB交互的强大工具。 lua-mongo是Lua社区中的一款开源项目,它的目标是使Lua程序员能够充分利用...

    mongo nodejs版管理工具

    4. **查询构建器**:对于更复杂的查询需求,adminMongo提供了一个查询构建器,允许你构建和执行各种MongoDB查询语句。 5. **数据导入/导出**:你可以将数据导出为JSON或CSV格式,也可以从这些文件导入数据,方便...

    前端开源库-mongo-unit

    这里就要提到一个非常实用的工具——Mongo-unit,它是一个专门为MongoDB设计的前端开源库,用于帮助开发者对应用中的数据库操作进行单元测试。 Mongo-unit的核心功能在于模拟MongoDB环境,允许开发者在不实际触碰...

    php5.5 mongodb 驱动 dll文件 32+64位 php_mongo.dll

    标题中的“php5.5 mongodb 驱动 dll文件 32+64位 php_mongo.dll”指的是一款适用于PHP 5.5版本的MongoDB数据库驱动程序,该驱动程序包含了32位和64位两种系统环境下的动态链接库(DLL)文件——php_mongo.dll...

    robo mongo

    标题中的"robo mongo"指的是Robo 3T,它是一个轻量级且高效的MongoDB管理工具,支持多种操作系统,如Windows、macOS和Linux。Robo 3T提供了与MongoDB服务器的直接连接,支持SSL加密,确保数据传输的安全性。用户可以...

    SmartBlog:SmartBlog-由Express和Swig提供支持

    (可安装图形化Mongo工具——Elipse插件) 3.克隆 $ git clone http://github.com/rccoder/SmartBlog.git 4.打开目录 $ cd SmartBlog 5.按照package.json安装必要中间件 npm install 6.运行程序 npm start ##拓展中间...

Global site tag (gtag.js) - Google Analytics