gpt4 book ai didi

javascript - 使用 _conflicts 而不是 409 创建或更新

转载 作者:行者123 更新时间:2023-12-03 05:53:29 24 4
gpt4 key购买 nike

是否可以将putbulkDocs放入couchdb/pouchdb并获得与复制相同的行为,即使用_conflicts赢得修订409 响应?

基本上我想避免以下代码中的冲突情况:

  const docs = Object
.keys(pendingSet)
.map(id => toDoc(deepClone(pendingSet[id]), { id, rev: this.revCache.get(id) }))

const results = await this.db.bulkDocs(docs)
const conflicts = []

for (let n = 0; n < results.length; ++n) {
const result = results[n]
if (result.error === 'conflict') {
// TODO: This needs review...
const doc = await this.db.get(docs[n]._id)
const rev = `${doc._rev.split('-')[0]}-${this.serverName}`
conflicts.push({
...docs[n],
_rev: rev
})
this.revCache.set(doc._id, rev)
} else if (result.error) {
callback(result.error)
} else {
this.revCache.set(result.id, result.rev)
}
}

await this.db.bulkDocs(conflicts, { new_edits: false })

我从 pouchdb 得到了一些提示但我仍然不确定如何应用它。

EDIT1:使用最新代码更新。

最佳答案

CouchDB 尝试保护自身免受冲突影响,因此,如果您尝试修改 CouchDB“已知”已被取代的文档修订版,您将收到 409 响应。

复制“逃脱”的方式是因为文档是使用标志“new_edits=false”批量写入目标计算机的。这指示 CouchDB 不要监管修订 token ,而是接受传入的 token (来自复制源的写入已经有自己的修订树)。

您可以通过如下调用自行完成此操作:

ccurl -X POST -d '{"docs":[{"_id":"x","_rev":"1-myrevtoken","y":3}],"new_edits":false}' '/a/_bulk_docs'

在本例中,我将第二个“修订版 1”强制写入已经有“修订版 2”的文档中:

id = x
├─ 1
│ ├─ 1-myrevtoken
│ └─ 1-a6664c0114e6002415a47b18d4c9d32f
└─ 2-bca8f049e40b76dbfca560e132aa5c31 *

获胜者仍然是“修订版 2”,但修订版 1 上的冲突仍未解决,直到您决定解决它。

关于javascript - 使用 _conflicts 而不是 409 创建或更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40046504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com