RethinkDB:​​如何按字符串字段的长度排序?

时间:2014-09-05 08:17:32

标签: rethinkdb

假设我有一个带有标题字段的文章表。我怎么能得到一个文章列表,按照标题的长度排序?

离。文章:

{id: '101', title: 'A title', contents: 'Lots of text'}

我试过了:

r.table('story').orderBy(function(doc){return r.row('title').length}).pluck('title')

但这是错误的。

2 个答案:

答案 0 :(得分:5)

您现在可以使用split("").count()作为解决方法

r.table("story").orderBy(function(doc) {
    return doc("title").split("").count()
}).pluck("title")

请参阅https://github.com/rethinkdb/rethinkdb/issues/264以跟踪本机方法的进度以获取字符串的长度。

答案 1 :(得分:0)

这是在RethinkDB 2.3中实现的,issue 4228

您可以执行类似

的操作
r.db('cms')
  .table('story')
  .map(doc => doc.merge({
    title_length: doc('title').default('').count()
  }))
  .orderBy(r.desc('title_length'));

然而,这是非常低效的,因为每次都会读取所有文档,这些文档的效率低于类似的SQL实现,后者只读取一列,而RethinkDB读取整个JSON。

如果您要经常查询,可能需要在文档中保存标题长度。