如何在Couchbase中更新文档的某些部分
在扫描文档时,我找不到如何更新文档的一部分 例如,假设整个文档如下所示: { “主动”:正确, “条形码”:“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语句也不太清楚如何在Couchbase中更新文档的某些部分,couchbase,Couchbase,在扫描文档时,我找不到如何更新文档的一部分 例如,假设整个文档如下所示: { “主动”:正确, “条形码”:“123456789”, “BrandID”:“9f3751ef-f14f-464a-bb86-854e99cf14c0”, “BuyCurrencyOverride”:“.37”, “购买折扣额”:“45.00”, “ID”:“003565a3-4a0d-47d9-befb-0ac642cb8057”, } 但我只想处理部分文档,因为在许多情况下,我不想选择/更新整个文档: { “主动”
谢谢您的问题的答案取决于您为什么只想更新文档的一部分(例如,您是否关心网络带宽?),以及您想如何执行更新(例如,从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"
}
}