CouchDB复制覆盖文档

CouchDB复制覆盖文档,couchdb,replication,Couchdb,Replication,我知道,当您在数据库a上创建文档,复制数据库,然后在DB a和DB B上对其进行更改,然后再次复制时,您会遇到冲突,但这两个版本都存在于修订树中 但是,当您在DB a上创建Id为XY的文档,然后在DB B上创建Id相同但内容不同的文档,然后进行复制时,只有一个版本存在。另一个会被覆盖 是因为这两个文档都没有其派生版本,所以复制算法无法知道它们都存在吗 如果是,有没有办法保存两个版本 用例是有两个数据库,一个本地数据库,一个在线数据库。它们是双向同步的。在两个DBs上,用户创建文档。但我需要确保,

我知道,当您在数据库a上创建文档,复制数据库,然后在DB a和DB B上对其进行更改,然后再次复制时,您会遇到冲突,但这两个版本都存在于修订树中

但是,当您在DB a上创建Id为XY的文档,然后在DB B上创建Id相同但内容不同的文档,然后进行复制时,只有一个版本存在。另一个会被覆盖

是因为这两个文档都没有其派生版本,所以复制算法无法知道它们都存在吗

如果是,有没有办法保存两个版本


用例是有两个数据库,一个本地数据库,一个在线数据库。它们是双向同步的。在两个DBs上,用户创建文档。但我需要确保,如果连接失败了一段时间,双方仍然可以创建文档,并且我可以在连接恢复时合并它们。我想这里最难的部分是创建而不是更新,对吗?

首先,为了更清楚,CouchDB不会覆盖数据。让您编写的数据被遗忘的唯一方法是对文档进行成功的更新

CouchDB将在复制过程中引入新的分支或冲突,以保留内容的所有差异。如果你看到的是可复制的,那就是一个bug。下面是我的成绩单,这表明CouchDB确实保留了预期的两个修订版本

旋度127.0.0.1:5984/db1-XPUT {好的:是的}

curl 127.0.0.1:5984/db2-XPUT {好的:是的}

curl 127.0.0.1:5984/db1/mydoc-XPUT-d'{foo:true}'

{确定:true,id:mydoc,版本:1-89248382088d08ccb7183515daf390b8}

curl 127.0.0.1:5984/db2/mydoc-XPUT-d'{foo:false}'

{确定:true,id:mydoc,版本:1-1153b140e4c8674e2e6425c94de860a0}

curl 127.0.0.1:5984/_replicate-Hcontent类型:application/json-d'{source:db1,target:db2}'

{好的:是的,…}

curl'127.0.0.1:5984/db2/mydoc?conflicts=true'

{id:mydoc,修订版:1-89248382088d08ccb7183515daf390b8,foo:true,{冲突:[1-1153b140e4c8674e2e6425c94de860a0]}


首先,为了完全清楚起见,CouchDB不会覆盖数据。让您编写的数据被遗忘的唯一方法是对文档进行成功的更新

CouchDB将在复制过程中引入新的分支或冲突,以保留内容的所有差异。如果你看到的是可复制的,那就是一个bug。下面是我的成绩单,这表明CouchDB确实保留了预期的两个修订版本

旋度127.0.0.1:5984/db1-XPUT {好的:是的}

curl 127.0.0.1:5984/db2-XPUT {好的:是的}

curl 127.0.0.1:5984/db1/mydoc-XPUT-d'{foo:true}'

{确定:true,id:mydoc,版本:1-89248382088d08ccb7183515daf390b8}

curl 127.0.0.1:5984/db2/mydoc-XPUT-d'{foo:false}'

{确定:true,id:mydoc,版本:1-1153b140e4c8674e2e6425c94de860a0}

curl 127.0.0.1:5984/_replicate-Hcontent类型:application/json-d'{source:db1,target:db2}'

{好的:是的,…}

curl'127.0.0.1:5984/db2/mydoc?conflicts=true'

{id:mydoc,修订版:1-89248382088d08ccb7183515daf390b8,foo:true,{冲突:[1-1153b140e4c8674e2e6425c94de860a0]}


先生,你说得对!我觉得自己很愚蠢。出于某种原因,我希望这两个版本都可以在蒲团中看到。但是如果获取带有{conflics:true}或conflicts=true的文档,两个版本都会出现,我可以处理合并。谢谢,不客气。我们正在用fauxton取代futon,并且计划构建一个显示冲突并帮助您解决冲突的UI!。先生,你说得对!我觉得自己很愚蠢。出于某种原因,我希望这两个版本都可以在蒲团中看到。但是如果获取带有{conflics:true}或conflicts=true的文档,两个版本都会出现,我可以处理合并。谢谢,不客气。我们正在用fauxton取代futon,并且计划构建一个显示冲突并帮助您解决冲突的UI!。