如何在 rethinkdb 中过滤数组大小?
How to filter on array size in rethinkdb?
我有一个table,里面有一堆定期(部分)更新的文档。
我实际上想做的是创建另一个 table(下面称为 changes
)来存储对每个文档的最新 N 次更改。
因此,我正在 table.changes()
获取 table 上的所有更改,计算我想要的差异信息(在下面称为 diffentry
)并将该信息添加到数组中另一个 table:
changes.get(doc_id).update({
'diffs': R.row['changes'].prepend(diffentry)
}).run()
这个棘手的问题是如何限制 diffs
数组的大小?
有一个数组方法 delete_at()
可以从数组中删除一个或多个项目,我 可以 只是 "brute force" 调用,例如:
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
...
关于如何以一种好的方式做这种事情有什么想法吗?
在 JS 中,您可以像这样使用带有 .count()
的函数:
update(function(doc){
return {
diffs: doc("diffs").deleteAt(diff_limit, doc("diffs").count())
}
}
).run()
我认为 python 中应该有类似的东西。
我有一个table,里面有一堆定期(部分)更新的文档。
我实际上想做的是创建另一个 table(下面称为 changes
)来存储对每个文档的最新 N 次更改。
因此,我正在 table.changes()
获取 table 上的所有更改,计算我想要的差异信息(在下面称为 diffentry
)并将该信息添加到数组中另一个 table:
changes.get(doc_id).update({
'diffs': R.row['changes'].prepend(diffentry)
}).run()
这个棘手的问题是如何限制 diffs
数组的大小?
有一个数组方法 delete_at()
可以从数组中删除一个或多个项目,我 可以 只是 "brute force" 调用,例如:
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
...
关于如何以一种好的方式做这种事情有什么想法吗?
在 JS 中,您可以像这样使用带有 .count()
的函数:
update(function(doc){
return {
diffs: doc("diffs").deleteAt(diff_limit, doc("diffs").count())
}
}
).run()
我认为 python 中应该有类似的东西。