【发布时间】:2016-11-03 09:19:10
【问题描述】:
我目前正在评估 ArangoDB 是否可以成为我们未来的替代方案。作为本次评估的一部分,我将与我们当前的 NoSQL 数据库对话的代码移植到与 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
(对于复制粘贴的剧透警告:继续前进。这个 sn-p 只会让你的生活变得悲惨。)
这显然不起作用,而且很可能有多个原因。 Arango 似乎不喜欢我使用点符号来引用属性,以数字(“0”)开头的属性也可能是一个问题等。虽然找到了一个例子 here 它似乎有点复杂和令人费解的是什么我正在努力做。还有另一个讨论here,这与我想做的很接近。但是,该讨论中提出的解决方案使用了关键字OLD,这在我的情况下会产生错误,并且代码替换了“0”中的所有键。
1) 原子增加num_sold 的最佳方法是什么?
2) 什么时候是原子操作? (尽量远离交易)
3) 点记法什么时候可以用,什么时候不能用?
4) 我可以将参数绑定到属性吗?例如让一些@attribute 成为subdoc.0.num_sold?
谢谢!
【问题讨论】:
标签: arangodb