Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting CouchDB-按位置对文档进行排序_Sorting_Document_Couchdb - Fatal编程技术网

Sorting CouchDB-按位置对文档进行排序

Sorting CouchDB-按位置对文档进行排序,sorting,document,couchdb,Sorting,Document,Couchdb,在CouchDB中,按用户定义的顺序(位置)对多个文档进行排序/排序的最佳实践是什么 我想到的解决方案是: 每个文档都有一个“位置”值,从1到n。视图将发出此值。问题:如果对一个文档进行了排序,则位置更大的所有其他文档都必须更新。这可能是数百次更新。嗯 每个文档都知道它的前一个文档的_id。该顺序是在检索视图后生成的 是一种特殊的文档,用于存储应按数组排序的所有文档的_id。检索视图后,我们再次在此解决方案中排序 问题是否有其他或更简单的解决方案?在RDBMS解决方案1中。是最佳实践,一个简单的

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

我想到的解决方案是:

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

  • 每个文档都知道它的前一个文档的_id。该顺序是在检索视图后生成的

  • 是一种特殊的文档,用于存储应按数组排序的所有文档的_id。检索视图后,我们再次在此解决方案中排序

  • 问题是否有其他或更简单的解决方案?在RDBMS解决方案1中。是最佳实践,一个简单的更新查询可以更新所有文档的位置

    致以最良好的祝愿,
    Bernd

    您可以使用一个浮点值,例如,位置在0.0和1.0之间。要将文档A移到文档B和文档C之间,只需将其新位置设置为
    (B.position+C.position)/2.0(即它们位置的平均值)。

    回答得很好。有关建议解决方案的更详细讨论,请参阅。这是一个有趣的解决方案。也许测试精度极限和可能移动的次数是个好主意。在JavaScript中,精度问题大约在第16次计算相同位置的平均值后开始。在PHP中,限制仅为结果长度。因此,这对位置的零星更改非常有效,并修复了长浮点值。是的,我有一个异步后台任务,当用户处于非活动状态时,它会删除小数,以使其非常健壮。也许可以使用字符串代替浮点键。在这种情况下,精度没有限制。