CouchDB - 按位置对文档进行排序
Posted
技术标签:
【中文标题】CouchDB - 按位置对文档进行排序【英文标题】:CouchDB - Sorting documents by position 【发布时间】:2010-03-10 18:17:30 【问题描述】:在 CouchDB 中按用户定义的顺序(位置)对多个文档进行排序/排序的最佳做法是什么?
我想到的解决方案:
每个文档都有一个“位置”值,从 1 到 n。视图会发出这个值。问题:如果对一个文档进行排序,则所有其他位置较大的文档都必须更新。这可能是数百个更新。嗯。
每个文档都知道它是前一个文档的 _id。检索视图后生成订单。
这是一个特殊的文档,存储所有文档的_ids,这些文档应该在一个数组中排序。检索视图后,我们再次在此解决方案中排序。
还有其他或更简单的解决方案吗?在 RDBMS 解决方案中 1. 是最佳实践,一个简单的更新查询会更新所有文档的位置。
最好的问候, 伯恩德
【问题讨论】:
【参考方案1】:您可以使用浮点值,例如 0.0 和 1.0 之间的位置。要将文档 A 移动到文档 B 和 C 之间,只需将其新位置设置为 (B.position + C.position) / 2.0
(即它们的位置的平均值)。
【讨论】:
优秀的答案。有关建议的解决方案的更详细讨论,请参阅books.couchdb.org/relax/reference/recipes#Ordering%20Lists。 嗯,这是一个有趣的解决方案。也许测试精度极限和可能的运动次数是个好主意。我会在这里发布。 在 javascript 中,精度问题大约在第 16 次计算同一位置的平均值之后开始。在 php 中,限制只是结果长度。因此,这对于位置的零星变化以及对长浮点值的修复非常有效。 是的,我有一个异步后台任务,当用户不活动时会删除小数,以使其真正强大。 也许用字符串代替浮点键。在这种情况下,精度没有限制。以上是关于CouchDB - 按位置对文档进行排序的主要内容,如果未能解决你的问题,请参考以下文章
Couchdb、couch-connector 和多个数据库
如何按字段对文档进行分组并使用带有 CouchDB 视图的自定义 reduce 函数列出不相等的值