假设我有一个带有标题字段的文章表。我怎么能得到一个文章列表,按照标题的长度排序?
离。文章:
{id: '101', title: 'A title', contents: 'Lots of text'}
我试过了:
r.table('story').orderBy(function(doc){return r.row('title').length}).pluck('title')
但这是错误的。
答案 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。
如果您要经常查询,可能需要在文档中保存标题长度。