首页 > 解决方案 > 如何在 RethinkDB 中获取给定谓词的元素索引

问题描述

您好,我有一个table我想documents在给定文档后获取所有内容的地方。

问题是我没有看到一个skipwhile功能,你给了一个predicate. 所以我必须首先找到我给定元素的索引。这是如何实现的?

例如:给定文件{"a":1 }, {"b":2}, {"a":33}, {"c":44},{"d":33}我想取最后一个之后的所有元素,a所以我想得到:[ {"c":44},{"d":33}]

这是否可以通过RethinkDB驱动程序实现,或者我需要在我拿到所有桌子后解决这个问题。

标签: c#rethinkdb

解决方案


所以我必须首先找到给定元素的索引。那是如何实现的?

您可以使用offsetsOf()函数。它返回与您搜索的元素匹配的索引数组。您可以通过以下方式获取文档的索引{"a":33}

r.expr([{"a":1 },{"b":2},{"a":33},{"c":44},{"d":33}])
  .offsetsOf({"a":33}).nth(0)

要进一步迭代其余元素,您可以使用r.range()函数,如下所示:

r.expr([{"a":1 },{"b":2},{"a":33},{"c":44},{"d":33}])
    .do(function(docs){
      return docs.offsetsOf({"a":33}).nth(0)
        .do(function(index){
          return r.range(index.add(1), docs.count())
            .map(function(i){
              return docs.nth(i)
            })
        })
    })

推荐阅读