mongodb基础篇--cursor对象


Cursor 对象不是查询结果,而是查询返回的 接口。当我们调用 find()/findMany()/findOne() 时,Shell 并不是立即从数据库中取出数据,而是在我们使用时才会取出数据。Cursor 对象有很多方法,例如 close(),hasNext(),next(), isClose() 等。

完整方法及对应描述如下表所示:

名称描述
cursor.addOption()添加特殊的线程协议标志,用于修改查询的行为。
cursor.batchSize()控制 MongoDB 在单个网络消息中返回客户端的文档数。
cursor.close()关闭游标并释放相关的服务器资源。
cursor.isClosed()true 如果光标关闭则返回。
cursor.collation()指定由返回的游标的排序规则。
cursor.comment()在查询中附加注释,以便在日志和 system.profile 集合中实现可跟踪性。
cursor.count()返回结果集中的文档数。
cursor.explain()报告游标的查询执行计划。
cursor.forEach()为游标中的每个文档应用 JavaScript 函数。
cursor.hasNext()如果游标包含文档并且可以迭代,则返回 true。
cursor.hint()强制 MongoDB 为查询使用特定索引。
cursor.isExhausted()检查游标是否处于关闭状态,为 true 代表关闭。
cursor.itcount()通过获取和迭代结果集来计算游标客户端中的文档总数。
cursor.limit()约束游标结果集的大小。
cursor.map()将函数应用于游标中的每个文档,并收集数组中的返回值。
cursor.max()指定游标的独占上限索引。
cursor.maxScan()指定要扫描的最大项目数; 收集扫描的文档,索引扫描的键。已过时
cursor.maxTimeMS()指定处理游标操作的累积时间限制(以毫秒为单位)。
cursor.min()指定游标的包含性较低索引范围。用于 cursor.hint()
cursor.next()返回游标中的下一个文档。
cursor.noCursorTimeout()指示服务器在一段时间不活动后自动关闭光标。
cursor.objsLeftInBatch()返回当前游标批处理中剩余的文档数。
cursor.pretty()配置光标以易于阅读的格式显示结果。
cursor.readConcern()指定读取关注的find()
cursor.readPref()指定对游标的读取首选项,以控制客户端如何将查询定向到复制集。
cursor.returnKey()修改游标以返回索引键而不是文档。
cursor.showRecordId()向光标返回的每个文档添加内部存储引擎ID字段。
cursor.size()返回应用 skip()
cursor.skip()返回仅在传递或跳过多个文档后才开始返回结果的游标。
cursor.sort()返回根据排序规范排序的结果。
cursor.tailable()将光标标记为 tailable,仅适用于超过上限集合的游标。
cursor.toArray()返回一个数组,其中包含游标返回的所有文档。
limit和skip

查询时可以使用 limit() 方法指定 Cursor返回的文档数量,这能够有效地提高查询性能。

skip(n)指跳过前n个

db.getCollection('test').find({}).limit(3)
db.getCollection('test').find({}).skip(10).limit(-3)

limit() 可以接受小于 2^31 的正整数和大于 -2^31 的负整数,数字 0 也是有效的。limit() 中的数字取绝对值,也就是说 limit(3) 和 limit(-3) 得到的结果是相同的。limit(0) 等效于 not limit,即未使用 limit()。

count()和size()

count()可以获取文档的总数量
size()也可以获取文档的总数量,但size()的结果会受到limit或skip的影响。

db.getCollection('test').find({}).count()
db.getCollection('test').find({}).size()
// 返回结果一样 都为14
db.getCollection('test').find({}).limit(10).count()
db.getCollection('test').find({}).limit(10).size()

// 返回结果不同。count()为14,size()为10
db.getCollection('test').find({}).skip(10).count()
// 14
db.getCollection('test').find({}).skip(10).size()
// 4
sort()

sort() 的升序用数字 1 ,降序用 -1 表示。

_id降序:

db.getCollection('test').find({}).sort({"_id":-1})

sort() 支持多条件排序,例如

db.getCollection('test').find({}).sort({"name":-1,"price":1})

MongoDB 在比较不同的 BOSN 类型时,将使用以下比较顺序,顺序从低到高:

  • MinKey (internal type)
  • Null
  • Numbers (ints, longs, doubles, decimals)
  • Symbol, String
  • Object
  • Array
  • BinData
  • ObjectId
  • Boolean
  • Date
  • Timestamp
  • Regular Expression
  • MaxKey (internal type)
next()和forEach()

使用find()查询时默认返回一定量的数据,比如Robo3T是50个。如果想获得更多的文档可以使用next()方法或者forEach()。

var cursor = db.getCollection('test').find({});
while(cursor.hasNext()){
    printjson(cursor.next())
}

hasNext()用于检查是否还存在下一个文档。next()是获取下一个文档。

forEach() 的语法如下:

db.collection.find().forEach(<function>)

打印所有数据

var cursor = db.getCollection('test').find({});
cursor.forEach(printjson)

或者获取某个字段值:

var cursor = db.getCollection('test').find({});
cursor.forEach(function(item){
    printjson(item._id)
})

toArray()

还可以使用toArray()方法迭代Cursor对象。toArray()会将文档装载到数组中,然后可以使用下标访问文档。

var cursor = db.getCollection('test').find({});
cursor.toArray()[3]
map()

map()的作用和forEach()类似。不同的是map()会将函数返回值装载到数组中。如果map()中的function没有return,那么数组中得到的将是undeffined。

var cursor = db.getCollection('test').find({});
cursor.map(function(item){
    return item._id
})

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值