如何在Couchbase

时间:2016-05-16 04:56:35

标签: couchbase

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

例如

- 说整个文档看起来像这样: {       "活跃":是的,       "条形码":" 123456789",       " BrandID":" 9f3751ef-f14f-464a-bb86-854e99cf14c0",       " BuyCurrencyOverride":" .37",       " BuyDiscountAmount":" 45.00",       " ID":" 003565a3-4a0d-47d9-befb-0ac642cb8057", }

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

{       "活跃":错误,       "条形码":" 999999999",       " BrandID":" 9f3751ef-f14f-464a-bb86-854e99cf14c0",       " ID":" 003565a3-4a0d-47d9-befb-0ac642cb8057", }

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

由于

3 个答案:

答案 0 :(得分:6)

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

您在评论中提供链接的4.5子文档API是仅通过SDK(例如,来自Go或Java程序)提供的功能,该功能的目标是通过以下方式减少网络带宽:没有传输整个文件。您的用例是否包含通过SDK进行的程序化文档修改?如果是这样,那么子文档API是一个很好的方法。

使用" UPDATE" N1QL中的语句是一种更改任何数量的文档的好方法,这些文档与您可以指定" WHERE"条款。如上所述,它与" UPDATE"非常相似。 SQL中的语句。要使用上面的示例,您可以更改" Active"在BuyDiscountAmount为" 45.00"

的任何文件中,字段为false
UPDATE my bucket SET Active = false WHERE BuyDiscountAmount = "45.00"

运行N1QL UPDATE查询时,几乎所有网络流量都将位于群集的查询,索引和数据节点之间,因此N1QL更新不会导致进出群集的网络流量过多。

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

答案 1 :(得分:2)

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

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

让我知道任何问题。 -Prasad

答案 2 :(得分:0)

像sql查询一样简单。

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

这是响应

{

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