完整方法及对应描述如下表所示:
名称 | 描述 |
---|---|
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() 方法指定 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()也可以获取文档的总数量,但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() 的升序用数字 1 ,降序用 -1 表示。
_id降序:
db.getCollection('test').find({}).sort({"_id":-1})
sort() 支持多条件排序,例如
db.getCollection('test').find({}).sort({"name":-1,"price":1})
MongoDB 在比较不同的 BOSN 类型时,将使用以下比较顺序,顺序从低到高:
使用find()查询时默认返回一定量的数据,比如Robo3T是50个。如果想获得更多的文档可以使用next()方法或者forEach()。
var cursor = db.getCollection('test').find({});
while(cursor.hasNext()){
printjson(cursor.next())
}
hasNext()用于检查是否还存在下一个文档。next()是获取下一个文档。
forEach() 的语法如下:
db.collection.find().forEach()
打印所有数据
var cursor = db.getCollection('test').find({});
cursor.forEach(printjson)
或者获取某个字段值:
var cursor = db.getCollection('test').find({});
cursor.forEach(function(item){
printjson(item._id)
})
还可以使用toArray()方法迭代Cursor对象。toArray()会将文档装载到数组中,然后可以使用下标访问文档。
var cursor = db.getCollection('test').find({});
cursor.toArray()[3]
map()的作用和forEach()类似。不同的是map()会将函数返回值装载到数组中。如果map()中的function没有return,那么数组中得到的将是undeffined。
var cursor = db.getCollection('test').find({});
cursor.map(function(item){
return item._id
})