我注意到r.table('xxx')
并不总是返回cursor
,但有时也会直接返回docs
仅cursor
客户端实施或server
执行与cursor
相关联的查询时有哪些特殊事项?
如果它与server
有关,那么它是什么以及何时会收到cursor
例如,我在查询中使用
skip
和limit
指定结果偏移量和大小。服务器会返回cursor
还是只返回结果docs
?
答案 0 :(得分:4)
当查询返回流时,驱动程序返回游标。
基本上,当服务器生成一个流(一个懒惰计算的序列)时,驱动程序将返回一个游标。当您从游标中获取行时,服务器将计算序列中的更多元素。
例如,当您运行r.table('xxx')
时,您将返回光标。当您使用驱动程序请求文件时,服务器将从磁盘加载文档。
在JavaScript驱动程序中,当查询返回一个数组时,驱动程序将潜行一个模仿arrray本身和Array.prototype之间的游标接口的对象。
因此,如果query.run(...)
返回序列,则可以执行
query.run(connection).then(function(result) {
return result.toArray()
}).then(function(result) {
// do something with result
}).error(function(err) {
// handle err
})
基本上如果你不想想要回到光标或数组,你可以认为它是一个光标。
您可以在此处阅读有关流/光标的更多信息:
http://www.rethinkdb.com/docs/data-types/