rethinkdb 中类似 reddit 的排序

reddit-like sorting in rethinkdb

我在 node.js 上使用带有 thinky ORM 的 rethinkdb。

我正在尝试使用从文档中获取数据的函数对 rethinkdb table 中的文档(帖子、评论)进行排序,并输出一个代表每个文档排序索引的数字,很像 reddit's time-sensitive ranking algorithm。然后应该能够使用 .slice().

对数据进行分页

有人知道怎么做吗?我完全迷路了。

ReQL 的 orderBy 项可以采用函数并按其结果排序。

我不确定 Thinky 中的确切语法(它应该是相似的),但这就是你在普通 ReQL 中的做法:

r.table(...).orderBy(function (row) { return row('sorting_index'); })

函数function (row) { return row('sorting_index'); }只是一个例子。您可以使用任何 ReQL 函数,甚至 r.js() 来提供任意 JavaScript 函数 http://rethinkdb.com/api/javascript/js/。请注意 r.js() 通常比使用本机 ReQL 语句慢很多。

orderBy 的文档有一个完整的示例:http://rethinkdb.com/api/javascript/order_by/

如果你运行这个查询经常并且性能很重要(或者数据集很大),我建议创建一个二级索引来加速这个操作:

r.table(...).indexCreate("sorting_idx", function (row) { return row('sorting_index'); })

那么你可以使用:

r.table(...).orderBy({index: "sorting_idx"})