如何在rethinkdb中过滤数组大小?

pyt*_*tor 4 arrays rethinkdb rethinkdb-python

我有一张桌子,桌子上有一堆文件,这些文件会定期(部分)进行更新。

我本质上想做的是创建另一个表(changes以下称为表),该表存储每个文档的最新N个更改。

因此table.changes(),我要做的是获取表上的所有更改,计算所需的diff信息(diffentry在下面称为),然后将该信息添加到另一个表中的数组中:

changes.get(doc_id).update({
    'diffs': R.row['changes'].prepend(diffentry)
}).run()
Run Code Online (Sandbox Code Playgroud)

这个棘手的地方是如何限制diffs数组的大小?

有一个delete_at()可以从数组中删除一个或多个项目的数组方法,我可以 “蛮力”调用,例如:

delete_at(diff_limit, diff_limit + 10000)
Run Code Online (Sandbox Code Playgroud)

并忽略任何错误(疯狂的上限只是偏执狂)。但这有点脏...

我认为更好,更好的方法是对大于限制的数组进行过滤并删除多余的位。伪:

changes.get(doc_id).filter(R.row['diffs'].length > diff_limit).update({
    'diffs': R.row['diffs'].delete_at(diff_limit, R.row['diffs'].length - 1)
}).run()
Run Code Online (Sandbox Code Playgroud)

但是,可惜,length我还没有发现……关于如何以一种不错的方式来做这种事情的任何想法?

Suv*_*ica 5

在JS中,您可以使用如下函数.count()

update(function(doc){
       return {
          diffs: doc("diffs").deleteAt(diff_limit, doc("diffs").count())
       }
   }
).run()
Run Code Online (Sandbox Code Playgroud)

我认为在python中应该是类似的东西。