У меня есть таблица с кучей документов, которые регулярно (частично) обновляются.
По сути, я пытаюсь создать еще одну таблицу (называемую changes
ниже), в которой хранятся последние N изменений в каждом из этих документов.
Таким образом, я делаю table.changes()
, чтобы получить все изменения в таблице, вычисляя нужную информацию о различиях (называемую diffentry
ниже) и добавляя эту информацию к массиву в другой таблице:
changes.get(doc_id).update({
'diffs': R.row['changes'].prepend(diffentry)
}).run()
Этот сложный момент заключается в том, как ограничить размер массива diffs
?
Существует метод массива delete_at()
, который может удалить один или несколько элементов из массива, который я мог бы просто вызвать "грубой силой", например:
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
, который я нашел... Есть идеи, как красиво это сделать?