游标
游标,简单的说就是一个查询结果的指针。游标作为数据库的一个对象,使用它是包括
- 声明
- 打开
- 循环抓去一定数目的文档直到结果集中的所有文档已经抓取完
- 关闭游标
游标的基本用法,类似于JDBC的ResultSet(hasNext判断是否抓去完,next移动游标到下一条文档),在获取一个文档集时,可以提供一个类似JDBC的FetchSize作为一次抓取的数据
for(i=0; i<100; i++) { db.c.insert({x : i}); //创建16个文档,每个文档由1个键值对组成 } var cursor = db.c.find(); //打开游标 while (cursor.hasNext()) { //判断游标是否到尾部 obj = cursor.next(); //滚动游标 print(obj.x);//obj是当前游标指向的文档 }
分页
db.c.find().skip(60).limit(10); //查询61-70的文档,如果仅仅指定skip,那么默认的limit是20
分页查询的过程如何,是先执行db.c.find()将所有的结果取出来,再做skip和limt吗?应该不是!
看下db.c.find().skip(60).limit(10)的执行计划:
db.c.find().skip(60).limit(10).explain(); { "cursor" : "BasicCursor", //使用基本游标,未使用索引 "isMultiKey" : false, "n" : 10,//结果集中的文档一共有10 "nscannedObjects" : 10, //扫描文档数目 "nscanned" : 70, //这个70表示什么意思?应该是skip(60).limit(10)之后的70 "nscannedObjectsAllPlans" : 10, "nscannedAllPlans" : 70, "scanAndOrder" : false, "indexOnly" : false, "nYields" : 0, "nChunkSkips" : 0, "millis" : 0, "indexBounds" : { }, "server" : "tom-Inspiron-3521:27017" }
对照看下db.c.find()的执行计划:
> db.c.find().explain(); { "cursor" : "BasicCursor", "isMultiKey" : false, "n" : 100,//结果中包含的文档数 "nscannedObjects" : 100, //扫描的文档数 "nscanned" : 100,//这个100表示什么意思? "nscannedObjectsAllPlans" : 100, "nscannedAllPlans" : 100, "scanAndOrder" : false, "indexOnly" : false, "nYields" : 0, "nChunkSkips" : 0, "millis" : 0, "indexBounds" : { }, "server" : "tom-Inspiron-3521:27017" }
查询结果排序
使用测试数据
var p1 = { "name":"Jack", "age":34, "nickname":"xiaoqiang", friends:[ {"name":"Cloe","age":"28"}, {"name":"Audrey","age":"31"}, ] } var p2 = { "name":"Cloe", "age":28, friends:[ {"name":"Jack","age":"34"}, {"name":"Mike","age":"31"}, ] } var p3 = { "name":"Audrey", "age":31, friends:[ {"name":"Jack","age":"34"}, {"name":"Hammer","age":"61","relation":"parent"}, ] }
按照年龄排序
db.people.drop(); db.people.insert(p1); db.people.insert(p2); db.people.insert(p3); db.people.find().sort({"age":-1}); //降序 db.people.find().sort({"age":-1}); //升序
相关推荐
mongodb学习笔记资料,从安装到操作库collection 对document的crud 索引 replicaSet sharding 备份与恢复
find()方法返回的是游标对象,可以链式调用sort()进行排序,skip()和limit()方法来实现分页功能。 除了单个集合的查询外,MongoDB的聚合框架提供了强大的数据处理能力。聚合查询允许开发者执行多个数据处理阶段,...
自己在学习MongoDB的一些笔记,里面有各个查询选择器的使用截图,还有一些索引的介绍。
查询数据通常涉及`Find`方法,它返回一个`IMongoCursor<T>`,你可以遍历这个游标来获取结果。例如,查找所有记录: ```csharp var cursor = await collection.FindAsync(new BsonDocument()); while (await cursor....
MongoDB 学习笔记 本文档是 MongoDB 学习笔记,涵盖了 NoSQL、Cache、运行平台等多个方面的知识点。 一、NoSQL 数据库 MongoDB MongoDB 是一个强大、灵活、可扩展性好的文档数据存储器,可以完成大部分关系数据库...
首先,`mongodb_and_python`学习笔记可能涵盖了如何使用Python编程语言与MongoDB进行交互。Python是常见的MongoDB驱动程序之一,通过PyMongo库,开发者可以方便地执行CRUD(创建、读取、更新、删除)操作,构建复杂...
mongodb学习笔记 MongoDB 是一个基于分布式文件存储的开源数据库系统,主要用于处理大量数据的存储和查询。以下是 MongoDB 的一些基本操作和技巧: 插入文档 MongoDB 中可以使用 `insert` 方法来插入文档,例如 ...
本篇文章将深入探讨如何使用Java与MongoDB进行数据分页查询,结合源码分析工具,帮助开发者更好地理解和应用这一技术。 首先,我们要了解的是MongoDB的基本概念。MongoDB是一个基于分布式文件存储的数据库,支持...
MongoDB 是一种流行的开源、非关系型数据库系统,以其灵活性、高性能和易用性而备受开发者青睐。在本文中,我们将深入探讨 ...在实际项目中,学习和掌握 MongoDB 及其驱动程序能够帮助你更好地应对现代数据存储需求。
MongoDB游标超时问题通常出现在使用游标迭代查询结果时,由于默认的游标超时设置(10分钟)限制,导致长时间未使用的游标失效。以下是对四种解决方法的详细阐述: 1. **修改MongoDB配置**: 这种方法涉及到更改...
本压缩包“mongoDB学习笔记及工具.zip”包含了一些资源,帮助你深入理解和掌握MongoDB的相关知识。 1. **笔记(note.txt)**: 这个文件可能是对MongoDB的基础概念、安装过程、基本操作和进阶特性的详细记录。笔记...
在 MongoDB 中,可以使用 `sort()` 方法来对查询结果进行排序。例如,`db.users.find().sort({ username: 1, insertTime: -1 })` 将对查询结果按照 `username` 升序和 `insertTime` 降序进行排序。 对于分页,可以...
总结的MongoDB的学习笔记,基本上包括了MongoDB的方方面面,每个知识点,都有示例代码,有需要的朋友,可以下载下来进一步补充完善。
在Java中操作MongoDB数据库时,我们经常需要执行模糊查询和分页查询来获取符合特定条件的数据,并且按需分页展示结果。本篇将详细讲解如何使用Java进行MongoDB的模糊查询和分页查询。 首先,让我们了解模糊查询。在...
游标在MongoDB中扮演着核心角色,它们允许用户以高效的方式迭代查询结果。游标具有延迟加载特性,即在查询执行时并不会立即加载所有数据,而是等到需要时才逐条加载,降低了内存消耗。 1. **基本游标**:`db....
MongoDB分页插件是专为MongoDB数据库设计的一个实用工具,主要目的是为了方便开发者在进行数据查询时实现高效、灵活的分页功能。在Java开发中,数据库操作是不可或缺的一部分,而面对大量数据时,分页显示尤为重要,...
本实例将深入探讨如何使用C#和ASP.NET进行MongoDB的基本操作,包括新增、修改、查询、分页查询、删除以及批量操作。 首先,我们要了解MongoDB .NET驱动程序。这是官方提供的SDK,允许C#开发者直接与MongoDB服务器...
4. **查询操作**:"MongoDB--查询.docx"可能涵盖了查询语言(MQL)的细节,包括基本查询、聚合操作、投影、排序、分页以及使用正则表达式进行文本搜索。 5. **插入、更新和删除操作**:"MongoDB--创建、更新、删除....