在扫描文档时,我找不到如何更新文档的一部分。
例如- 说整个文档看起来像这样: { "活跃":是的, "条形码":" 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完全替换整个文档,更新语句不是那么清楚。
由于
答案 0 :(得分:6)
您的问题的答案取决于为什么您只想更新文档的一部分(例如,您是否关注网络带宽?),以及您希望如何执行更新(例如,从Web控制台?使用SDK的程序?)。
您在评论中提供链接的4.5子文档API是仅通过SDK(例如,来自Go或Java程序)提供的功能,该功能的目标是通过以下方式减少网络带宽:没有传输整个文件。您的用例是否包含通过SDK进行的程序化文档修改?如果是这样,那么子文档API是一个很好的方法。
使用" UPDATE" N1QL中的语句是一种更改任何数量的文档的好方法,这些文档与您可以指定" WHERE"条款。如上所述,它与" UPDATE"非常相似。 SQL中的语句。要使用上面的示例,您可以更改" Active"在BuyDiscountAmount为" 45.00"
的任何文件中,字段为falseUPDATE 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"
}
}