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 和多个数据库

是否有 jquery.couch.js 的文档? [关闭]

如何按字段对文档进行分组并使用带有 CouchDB 视图的自定义 reduce 函数列出不相等的值

如何使用 Jquery 和 CouchDb 创建 SIGN UP 和 LOG IN?

在代码存储库中存储 couchDB 视图

限制用户访问 CouchDB 中的某些文档