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

【MongoDB学习笔记八】MongoDB游标、分页查询、查询结果排序

 
阅读更多

游标

 

游标,简单的说就是一个查询结果的指针。游标作为数据库的一个对象,使用它是包括

  • 声明
  • 打开
  • 循环抓去一定数目的文档直到结果集中的所有文档已经抓取完
  • 关闭游标

 

游标的基本用法,类似于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学习笔记资料

    mongodb学习笔记资料,从安装到操作库collection 对document的crud 索引 replicaSet sharding 备份与恢复

    MongoDB学习笔记思维导图.pdf

    find()方法返回的是游标对象,可以链式调用sort()进行排序,skip()和limit()方法来实现分页功能。 除了单个集合的查询外,MongoDB的聚合框架提供了强大的数据处理能力。聚合查询允许开发者执行多个数据处理阶段,...

    MongoDB学习笔记

    自己在学习MongoDB的一些笔记,里面有各个查询选择器的使用截图,还有一些索引的介绍。

    基于c#的Mongodb帮助类源码 含一个分页效率测试

    查询数据通常涉及`Find`方法,它返回一个`IMongoCursor&lt;T&gt;`,你可以遍历这个游标来获取结果。例如,查找所有记录: ```csharp var cursor = await collection.FindAsync(new BsonDocument()); while (await cursor....

    Mongodb学习笔记.docx

    MongoDB 学习笔记 本文档是 MongoDB 学习笔记,涵盖了 NoSQL、Cache、运行平台等多个方面的知识点。 一、NoSQL 数据库 MongoDB MongoDB 是一个强大、灵活、可扩展性好的文档数据存储器,可以完成大部分关系数据库...

    mongodb学习笔记和mongodb权威指南

    首先,`mongodb_and_python`学习笔记可能涵盖了如何使用Python编程语言与MongoDB进行交互。Python是常见的MongoDB驱动程序之一,通过PyMongo库,开发者可以方便地执行CRUD(创建、读取、更新、删除)操作,构建复杂...

    mongodb学习笔记

    mongodb学习笔记 MongoDB 是一个基于分布式文件存储的开源数据库系统,主要用于处理大量数据的存储和查询。以下是 MongoDB 的一些基本操作和技巧: 插入文档 MongoDB 中可以使用 `insert` 方法来插入文档,例如 ...

    java+mongodb+分页

    本篇文章将深入探讨如何使用Java与MongoDB进行数据分页查询,结合源码分析工具,帮助开发者更好地理解和应用这一技术。 首先,我们要了解的是MongoDB的基本概念。MongoDB是一个基于分布式文件存储的数据库,支持...

    MongoDB学习笔记1

    MongoDB 是一种流行的开源、非关系型数据库系统,以其灵活性、高性能和易用性而备受开发者青睐。在本文中,我们将深入探讨 ...在实际项目中,学习和掌握 MongoDB 及其驱动程序能够帮助你更好地应对现代数据存储需求。

    MongoDB游标超时问题的4种解决方法

    MongoDB游标超时问题通常出现在使用游标迭代查询结果时,由于默认的游标超时设置(10分钟)限制,导致长时间未使用的游标失效。以下是对四种解决方法的详细阐述: 1. **修改MongoDB配置**: 这种方法涉及到更改...

    mongoDB学习笔记及工具.zip

    本压缩包“mongoDB学习笔记及工具.zip”包含了一些资源,帮助你深入理解和掌握MongoDB的相关知识。 1. **笔记(note.txt)**: 这个文件可能是对MongoDB的基础概念、安装过程、基本操作和进阶特性的详细记录。笔记...

    mongoDB-查询语法

    在 MongoDB 中,可以使用 `sort()` 方法来对查询结果进行排序。例如,`db.users.find().sort({ username: 1, insertTime: -1 })` 将对查询结果按照 `username` 升序和 `insertTime` 降序进行排序。 对于分页,可以...

    MongoDB学习笔记思维导图

    总结的MongoDB的学习笔记,基本上包括了MongoDB的方方面面,每个知识点,都有示例代码,有需要的朋友,可以下载下来进一步补充完善。

    Java操作MongoDB模糊查询和分页查询

    在Java中操作MongoDB数据库时,我们经常需要执行模糊查询和分页查询来获取符合特定条件的数据,并且按需分页展示结果。本篇将详细讲解如何使用Java进行MongoDB的模糊查询和分页查询。 首先,让我们了解模糊查询。在...

    MongoDB入门教程之聚合和游标操作介绍

    游标在MongoDB中扮演着核心角色,它们允许用户以高效的方式迭代查询结果。游标具有延迟加载特性,即在查询执行时并不会立即加载所有数据,而是等到需要时才逐条加载,降低了内存消耗。 1. **基本游标**:`db....

    MongoDB分页插件

    MongoDB分页插件是专为MongoDB数据库设计的一个实用工具,主要目的是为了方便开发者在进行数据查询时实现高效、灵活的分页功能。在Java开发中,数据库操作是不可或缺的一部分,而面对大量数据时,分页显示尤为重要,...

    C#,asp.net操作mongodb实例,新增,修改,查询,分页查询,删除,基类封装,打开直接运行

    本实例将深入探讨如何使用C#和ASP.NET进行MongoDB的基本操作,包括新增、修改、查询、分页查询、删除以及批量操作。 首先,我们要了解MongoDB .NET驱动程序。这是官方提供的SDK,允许C#开发者直接与MongoDB服务器...

    MongoDB学习总结笔记

    4. **查询操作**:"MongoDB--查询.docx"可能涵盖了查询语言(MQL)的细节,包括基本查询、聚合操作、投影、排序、分页以及使用正则表达式进行文本搜索。 5. **插入、更新和删除操作**:"MongoDB--创建、更新、删除....

Global site tag (gtag.js) - Google Analytics