gpt4 book ai didi

couchbase - Couchbase 中的条件更新插入

转载 作者:行者123 更新时间:2023-12-04 10:35:00 28 4
gpt4 key购买 nike

我有看起来像这样的文件:

{
"name": "n",
"age": 22
//other properties

"hash": "XyRZHDJJD6738..." //This property contains the hash of the object (calculated by the client)
}

从客户那里,我应该:
  • 使用其 key (已知)更新文档,仅当散列不同时 (=> 存储的对象和新的对象不一样)
  • 如果 Key 不存在,则插入文档

  • 此操作是在相对较大的数据集上以批量模式完成的,并发访问 => 因此,获取文档然后更新不是一种选择。

    有没有办法在 Couchbase (5.1+) 中做到这一点?

    最佳答案

    通过对文档模型的调整,您可以得到如下内容:

    {
    "name": "n",
    "age": 22,
    "applied_hashes": {
    "XyRZHDJJD6738": null,
    "AB2343DCxdsAd": null,
    // ... other hashes
    }
    }

    现在您可以将每次更新作为子文档操作进行,第一个规范是尝试将更新的哈希值插入到应用哈希中。如果先前已应用该哈希/更新,则此插入将失败,并且由于子文档是原子的,因此不会对文档进行任何更改。

    使用 Java SDK 3.x,这看起来像:
    try {
    collection.mutateIn("id",
    Arrays.asList(
    MutateInSpec.insert("applied_hashes.XyRZHDJJD6738", null).createPath(),
    MutateInSpec.upsert("age", 24)
    // .. other parts of update XyRZHDJJD6738 here
    ));
    }
    catch (PathExistsException err) {
    // Update XyRZHDJJD6738 has already been applied
    // No changes have been made to the document
    }

    关于couchbase - Couchbase 中的条件更新插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60225853/

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