如何在Couchbase中更新文档的某些部分

如何在Couchbase中更新文档的某些部分,couchbase,Couchbase,在扫描文档时,我找不到如何更新文档的一部分 例如,假设整个文档如下所示: { “主动”:正确, “条形码”:“123456789”, “BrandID”:“9f3751ef-f14f-464a-bb86-854e99cf14c0”, “BuyCurrencyOverride”:“.37”, “购买折扣额”:“45.00”, “ID”:“003565a3-4a0d-47d9-befb-0ac642cb8057”, } 但我只想处理部分文档,因为在许多情况下,我不想选择/更新整个文档: { “主动”

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

例如,假设整个文档如下所示: { “主动”:正确, “条形码”:“123456789”, “BrandID”:“9f3751ef-f14f-464a-bb86-854e99cf14c0”, “BuyCurrencyOverride”:“.37”, “购买折扣额”:“45.00”, “ID”:“003565a3-4a0d-47d9-befb-0ac642cb8057”, }

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

{ “主动”:假, “条形码”:“99999999”, “BrandID”:“9f3751ef-f14f-464a-bb86-854e99cf14c0”, “ID”:“003565a3-4a0d-47d9-befb-0ac642cb8057”, }

如何使用N1QL只更新这些字段?Upsert完全替换了整个文档,update语句也不太清楚


谢谢

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

4.5子文档API(您在评论中为其提供了链接)是一项仅通过SDK提供的功能(例如,从Go或Java程序),该功能的目标是通过不传输整个文档来减少网络带宽。您的用例是否包括通过SDK进行的编程文档修改?如果是这样,那么子文档API就是一个很好的方法

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

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


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

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

让我知道任何Qs。
-Prasad

它像sql查询一样简单

update `Employee` set District='SambalPur' where EmpId="1003"
这是回应

{


您尝试过什么更新语句?应该是类似于使用键y更新x设置Active=False,Barcode=9999999,设置…返回x.*所以-我对Couchbase很陌生,看起来我想做的实际上是我正在使用的4.5 Beta中的一个新功能。我想查看并更新文档的一部分。我只是没有能够将对象放入N1QL并使其工作(在内置查询编辑器中)就我个人而言,我没有使用N1QL,但它是4.1 docsThanks的一部分,但我认为如果我必须单独更新每个属性,那么我可能还是坚持使用SQL server。我也看了一下这一点-我只是不能完全理解它。好的,非常感谢。是的,我将使用.Net SDK(可能适用于.Net?)。我宁愿将一个页面绑定到一个完整的文档中,然后就可以提交该文档,而不是为每个字段编写更新—是的,这样可以节省网络带宽。所有SDK的最新版本都应该支持子文档API,但PHP除外(很快就会提供),因此您应该能够将其与.Net一起使用。
update `Employee` set District='SambalPur' where EmpId="1003"
    "Employee": {
      "Country": "India",
      "District": "SambalPur",
      "EmpId": "1003",
      "EmpName": "shyam",
      "Location": "New-Delhi"
    }
  }