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"})
我在 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"})