【发布时间】:2011-08-19 09:35:45
【问题描述】:
我知道 CouchDB 会识别复制后发生冲突的文档。 CouchDB 对 _design 文档的冲突检测处理是否与常规文档不同?例如,我在 DB1 中修改了一个 _design 文档。然后我在 DB2 中修改相同的 _design 文档。然后我将 DB1 复制到 DB2。我希望 CouchDB 识别出冲突,但是在复制之后,Couch 不会返回任何冲突。
【问题讨论】:
标签: couchdb
我知道 CouchDB 会识别复制后发生冲突的文档。 CouchDB 对 _design 文档的冲突检测处理是否与常规文档不同?例如,我在 DB1 中修改了一个 _design 文档。然后我在 DB2 中修改相同的 _design 文档。然后我将 DB1 复制到 DB2。我希望 CouchDB 识别出冲突,但是在复制之后,Couch 不会返回任何冲突。
【问题讨论】:
标签: couchdb
设计文档与普通文档完全一样,因此命名为“设计文档”而不是“沙发程序”等。
如果您对不同数据库中的相同文档进行相同的修改,您将有没有冲突。运行 couchapp push 可能会产生这种情况,如果您将同一个应用程序推送到两个不同的数据库(并且它们以相同的 _rev 开头)。
否则,无论设计文档与否,您都会遇到冲突。当然,couch 会将一个修订版“提升”为规范版本,但如果您在视图中检查_conflicts,您会看到它们。 (要在视图中查看设计文档,您还必须启用include_design 选项。)
{ "_id": "_design/example"
, "views":
{ "conflicts":
{ "options": {"include_design": true}
, "map": "function(doc) { if(doc._conflicts) emit(doc._id, doc._conflicts); }"
}
}
}
使用键范围扫描查找冲突的 ddocs:
?startkey="_design/"&endkey="_design0"
【讨论】:
false。激活它后,您将看到 ddoc 冲突。 (你也可以把它放在一个完全独立的视图中,由你决定。)