首页 > 编程知识 正文

mongodb cursor,mongodb存储对象

时间:2023-05-05 22:03:52 阅读:213396 作者:365

文章目录 limit和skipcount()和size()sort()next()和forEach()toArray()map()
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()// 14db.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 类型时,将使用以下比较顺序,顺序从低到高:

kqdjw (internal type)NullNumbers (ints, longs, doubles, decimals)Symbol, StringObjectArrayBinDataObjectIdBooleanDateTimestampRegular ExpressionMaxKey (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五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。