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

时间:2015-09-23 09:53:39

标签: arrays rethinkdb rethinkdb-python

我有一张表,其中包含一些定期更新的文档(部分)。

我实际上要做的是创建另一个表(下面称为changes),该表存储每个文档的最新N个更改。

我这样做table.changes()来获取表格上的所有更改,计算我想要的差异信息(下面称为diffentry)并将该信息预先添加到另一个表中的数组中:

changes.get(doc_id).update({
    'diffs': R.row['changes'].prepend(diffentry)
}).run()

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

数组方法delete_at()可以删除数组中的一个或多个项目,我可以只是"暴力" -call,像:

delete_at(diff_limit, diff_limit + 10000)

并忽略任何错误(疯狂的上限只是偏执狂)。但那感觉很脏......

我认为更好的方法是过滤大于限制的数组并删除超出的位数。伪:

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()

但是,唉,我发现没有length ...... 关于如何以一种很好的方式做这种事情的任何想法?

1 个答案:

答案 0 :(得分:4)

在JS中,您可以使用.count()这样的函数:

update(function(doc){
       return {
          diffs: doc("diffs").deleteAt(diff_limit, doc("diffs").count())
       }
   }
).run()

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