我目前正在評估ArangoDB是否可以成爲我們的未來選擇。作爲評估的一部分,我將與當前的NoSQL數據庫進行對話的代碼移植到代表ArangoDB的代碼中。雖然到目前爲止這一行程相當順利,但我如何更新子文件的難度令人驚訝。假設我們有這樣的事情:更新ArangoDB子文檔
{
"_key": "12345",
"subdoc": {
"0": {
"num_sold": 6,
"other_attribute": "important"
},
"1": {
"num_sold": 4,
"other_attribute": "important"
}
}
}
我現在想完成它以原子增加num_sold
。
一個非常第一幼稚的做法當然是嘗試類似於:
FOR d in @@collection
FILTER d._key == "12345"
UPDATE d WITH { subdoc.0.num_sold : subdoc.0.num_sold + 1 } IN @@collection
RETURN d
(劇透了複製pasters那裏:。移動在這個片段只會讓你的生活苦不堪言)
這顯然不起作用,最有可能的原因不止一個。 Arango似乎並不喜歡使用點符號引用屬性,但以數字(「0」)開頭的屬性也可能是一個問題等。雖然找到了一個示例here但它看起來既複雜又複雜,試圖去做。還有另一個討論here接近我想要做的。然而,在該討論中提出的解決方案使用關鍵字OLD
,在我的情況下會產生一個錯誤,並且代碼會替換「0」中的所有鍵。
1)什麼是原子增加num_sold
的最佳方式?
2)什麼時候操作原子? (儘量遠離交易儘可能長)
3)什麼時候可以使用點符號?何時不能使用?
4)我可以將參數綁定到屬性嗎?例如讓一些@attribute
爲subdoc.0.num_sold
?
謝謝!