如何在 Couchbase 中更新部分文档

How to Update Parts of a document in Couchbase

在扫描文档时,我找不到如何更新文档的一部分。

例如 - 假设整个文档如下所示: { "Active": 是的, "Barcode": "123456789", "BrandID": "9f3751ef-f14f-464a-bb86-854e99cf14c0", "BuyCurrencyOverride": ".37", "BuyDiscountAmount": "45.00", "ID":“003565a3-4a0d-47d9-befb-0ac642cb8057”, }

但我只想处理文档的一部分,因为在很多情况下我不想选择/更新整个文档:

{ "Active":错误, "Barcode": "999999999", "BrandID": "9f3751ef-f14f-464a-bb86-854e99cf14c0", "ID":“003565a3-4a0d-47d9-befb-0ac642cb8057”, }

我如何使用 N1QL 来更新这些字段? Upsert 完全替换了整个文档,update 语句不是很清楚。

谢谢

您问题的答案取决于为什么您只想更新文档的一部分(例如,您是否担心网络带宽?),以及您希望如何执行更新(例如,从 Web 控制台?从使用 SDK 的程序?)。

您在评论中为其提供了 link 的 4.5 子文档 API 是一项只能通过 SDK(例如从 Go 或 Java 程序获得)的功能),该功能的目标是通过不传输整个文档来减少网络带宽。您的用例是否包括通过 SDK 进行的程序化文档修改?如果是这样,那么子文档 API 是个不错的选择。

在 N1QL 中使用“UPDATE”语句是更改任意数量的与您可以指定“WHERE”子句的模式匹配的文档的好方法。如上所述,它的工作方式与 SQL 中的“UPDATE”语句非常相似。要使用上面的示例,您可以在 BuyDiscountAmount 为“45.00”的任何文档中将“Active”字段更改为 false:

UPDATE my bucket SET Active = false WHERE BuyDiscountAmount = "45.00"

当 运行 N1QL UPDATE 查询时,几乎所有的网络流量都将在您集群的查询、索引和数据节点之间,因此 N1QL 更新不会造成太多网络流量 into/out-of你的集群。

如果您提供有关您的用例的更多详细信息,以及为什么您只想更新部分文档,我可以就正确的方法提供更具体的建议。

Couchbase4.5引入的子文档API目前N1QL没有使用。但是,当您使用 UPDATE 语句更新一个或多个文档的部分内容时。

http://developer.couchbase.com/documentation/server/current/n1ql/n1ql-language-reference/update.html

让我知道任何问题。 -普拉萨德

像sql查询一样简单

update `Employee` set District='SambalPur' where EmpId="1003"

这是回复

{

    "Employee": {
      "Country": "India",
      "District": "SambalPur",
      "EmpId": "1003",
      "EmpName": "shyam",
      "Location": "New-Delhi"
    }
  }