【问题标题】:CouchDB - Sorting documents by positionCouchDB - 按位置对文档进行排序
【发布时间】:2010-03-10 18:17:30
【问题描述】:

在 CouchDB 中按用户定义的顺序(位置)对多个文档进行排序/排序的最佳做法是什么?

我想到的解决方案:

  1. 每个文档都有一个“位置”值,从 1 到 n。视图会发出这个值。问题:如果对一个文档进行排序,则所有其他位置较大的文档都必须更新。这可能是数百个更新。嗯。

  2. 每个文档都知道它是前一个文档的 _id。检索视图后生成订单。

  3. 这是一个特殊的文档,存储所有文档的_ids,这些文档应该在一个数组中排序。检索视图后,我们再次在此解决方案中排序。

还有其他或更简单的解决方案吗?在 RDBMS 解决方案中 1. 是最佳实践,一个简单的更新查询会更新所有文档的位置。

最好的问候, 伯恩德

【问题讨论】:

    标签: sorting document couchdb


    【解决方案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 中,限制只是结果长度。因此,这对于位置的零星变化以及对长浮点值的修复非常有效。
    • 是的,我有一个异步后台任务,当用户不活动时会删除小数,以使其真正强大。
    • 也许用字符串代替浮点键。在这种情况下,精度没有限制。
    猜你喜欢
    • 2016-01-25
    • 1970-01-01
    • 2012-03-21
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多