如何在 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"
}
}
在扫描文档时,我找不到如何更新文档的一部分。
例如 - 假设整个文档如下所示: { "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"
}
}