因此,假設我在一個存儲桶下創建了一些記錄/文檔,並且用戶只更新了RDBMS中的一列(10),所以我嘗試只發送一列數據並在couchbase中進行更新。但問題是,couchbase覆蓋了整個記錄,併爲其餘列填入NULL。如何將現有數據保存在couchbase中,只更新新數據而不覆蓋
一種方法是從Cbase中獲取現有記錄後複製所有數據,然後覆蓋新列,同時從舊數據複製數據。但是,這看起來不是最佳方法
有什麼建議嗎?
因此,假設我在一個存儲桶下創建了一些記錄/文檔,並且用戶只更新了RDBMS中的一列(10),所以我嘗試只發送一列數據並在couchbase中進行更新。但問題是,couchbase覆蓋了整個記錄,併爲其餘列填入NULL。如何將現有數據保存在couchbase中,只更新新數據而不覆蓋
一種方法是從Cbase中獲取現有記錄後複製所有數據,然後覆蓋新列,同時從舊數據複製數據。但是,這看起來不是最佳方法
有什麼建議嗎?
如果您使用的是結構化(json)數據,您需要讀取現有記錄,然後在程序的數據結構中更新所需的字段,然後再次發送記錄。您不能更新json結構中的單個字段,而無需再次發送。我沒有辦法解決這個問題。
您可以使用N1QL update stats Google for Couchbase N1QL UPDATE用已更新的值替換已存在的文檔。
更新:
UPDATE keyspace-ref [use-keys-clause] [set-clause] [unset-clause] [where-clause] [limit-clause] [returning-clause]
設定條款:
SET path = expression [update-for] [ , path = expression [update-for] ]*
更新爲:
FOR variable (IN | WITHIN) path (, variable (IN | WITHIN) path)* [WHEN condition ] END
未設置子句:
UNSET path [update-for] (, path [ update-for ])*
keyspace-ref: Specifies the keyspace for which to update the document.
您可以用這種方式添加一個可選的命名空間名稱密鑰空間名稱:
namespace-name:keyspace-name.
使用密鑰子句:指定數據項的鎖進行更新。可選的。鍵可以是任何表達式。
set-clause:指定要更改的屬性的值。
unset-clause:從文檔中刪除指定的屬性。
update-for:update for子句使用FOR語句遍歷嵌套數組,SET或UNSET給出數組中每個匹配元素的給定屬性。
where-clause:指定要更新的數據需要滿足的條件。可選的。
limit-clause:指定可以更新的最大對象數。該子句必須具有非負整數作爲其上限。可選的。
返回子句:返回按照result_expression中的指定更新的數據。
RBAC特權
用戶執行UPDATE語句必須對目標密鑰空間查詢更新特權。如果語句包含任何需要讀取數據的子句,如SELECT子句或RETURNING子句,則對各個子句中引用的密鑰空間也需要查詢選擇特權。有關用戶角色的更多詳細信息,請參閱授權。
例如,
要執行以下語句,用戶必須對travel-sample
查詢更新特權。
UPDATE `travel-sample` SET foo = 5
要執行以下語句,用戶必須對travel-sample
和查詢的SELECT權限查詢更新權限上beer-sample
。
UPDATE `travel-sample`
SET foo = 9
WHERE city = (SELECT raw city FROM `beer-sample` WHERE type = "brewery"
To execute the following statement, user must have the Query Update privilege on `travel-sample` and Query Select privilege on `travel-sample`.
UPDATE `travel-sample`
SET city = 「San Francisco」
WHERE lower(city) = "sanfrancisco"
RETURNING *
Example
下面的語句改變產品的 「類型」, 「odwalla-juice1」 到 「以產品爲果汁」。
UPDATE product USE KEYS "odwalla-juice1" SET type = "product-juice" RETURNING product.type
"results": [
{
"type": "product-juice"
}
]
此聲明從具有「odwalla-juice1」鍵的文檔的「product」鍵空間中刪除「type」屬性。
UPDATE product USE KEYS "odwalla-juice1" UNSET type RETURNING product.*
"results": [
{
"productId": "odwalla-juice1",
"unitPrice": 5.4
}
]
此語句用教程密鑰空間中的鍵「dave」取消文檔的「children」數組中的「gender」屬性。
UPDATE tutorial t USE KEYS "dave" UNSET c.gender FOR c IN children END RETURNING t
"results": [
{
"t": {
"age": 46,
"children": [
{
"age": 17,
"fname": "Aiden"
},
{
"age": 2,
"fname": "Bill"
}
],
"email": "[email protected]",
"fname": "Dave",
"hobbies": [
"golf",
"surfing"
],
"lname": "Smith",
"relation": "friend",
"title": "Mr.",
"type": "contact"
}
}
]
從版本4.5.1開始,UPDATE語句已經改進爲SET嵌套數組元素。 FOR子句被增強以評估函數和表達式,並且新語法支持多個嵌套的FOR表達式來訪問和更新嵌套數組中的字段。鏈接FOR子句支持額外的數組級別。
例
UPDATE default
SET i.subitems = (ARRAY OBJECT_ADD(s, 'new', 'new_value')
FOR s IN i.subitems END)
FOR s IN ARRAY_FLATTEN(ARRAY i.subitems
FOR i IN items END, 1) END;
這是couchbase/CouchDB的是如何工作的。每個文件必須作爲一個整體書寫。你不能寫個別部分。 – WiredPrairie