Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/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
如果不使用复制,如何在CouchDB中模拟冲突?_Couchdb_Conflict - Fatal编程技术网

如果不使用复制,如何在CouchDB中模拟冲突?

如果不使用复制,如何在CouchDB中模拟冲突?,couchdb,conflict,Couchdb,Conflict,我想为我的应用程序编写一个单元测试,模拟复制过程中的冲突。有没有办法只使用一个CouchDB数据库和服务器来模拟冲突?只需发布两个具有相同id属性的文档即可。这会产生冲突,因为第二个文档将不包含正确的_rev属性。请记住,您需要在随后的每篇文章中包含最新的_rev属性,以便CouchDB知道您是最新的 此外,您还可以在同一台服务器上创建两个数据库,并在它们之间进行复制。我假设您希望在数据库中获取包含冲突的文档,而不是409冲突响应 因此,在数据库中创建一个具有已知_id的文档: $ curl h

我想为我的应用程序编写一个单元测试,模拟复制过程中的冲突。有没有办法只使用一个CouchDB数据库和服务器来模拟冲突?

只需发布两个具有相同id属性的文档即可。这会产生冲突,因为第二个文档将不包含正确的_rev属性。请记住,您需要在随后的每篇文章中包含最新的_rev属性,以便CouchDB知道您是最新的


此外,您还可以在同一台服务器上创建两个数据库,并在它们之间进行复制。

我假设您希望在数据库中获取包含冲突的文档,而不是409冲突响应

因此,在数据库中创建一个具有已知_id的文档:

$ curl http://localhost:5984/scratch/foo -X PUT -H "Content-Type: application/json" -d '{}'
{"ok":true,"id":"foo","rev":"1-967a00dff5e02add41819138abb3284d"}
然后将bulk docs API与all_或_nothing:true选项一起使用,以故意错误或否版本更新同一文档,添加一些不同的文档属性以获得良好的度量:

$ curl http://localhost:5984/scratch/_bulk_docs -X POST -H "Content-Type: application/json" -d '{"all_or_nothing": true, "docs": [{"_id": "foo", "abc": 123}]}'
[{"id":"foo","rev":"1-15c813a2b4b312c6915821b01a1986c5"}]
然后,文档中应该存在冲突:

$ curl http://localhost:5984/scratch/foo?conflicts=true
{"_id":"foo","_rev":"1-967a00dff5e02add41819138abb3284d","_conflicts":["1-15c813a2b4b312c6915821b01a1986c5"]}
您还可以使用
?new_edits=false执行常规查询


问了这个问题后,谷歌进一步搜索,答案似乎是使用批量文档API的
all or nothing
模式


请看这一页的末尾。

+1。我冒昧地添加了我最近学到的另一项技术。是的,两个数据库的方法会起作用。不过,我不知道使用相同id方法的两个文档如何工作。你会不会在第二个PUT上出现409冲突?啊,误读了你想让它模拟复制。对不起!
$ curl http://localhost:5984/scratch?new_edits=false -X POST -H "Content-Type: application/json" -d '{"_id": "foo", "abc": 123}'