我認爲這個問題是
[{"-ip","-mask"},{"-ip","-mask"}]
將無法正常工作。當使用大括號和成員名稱(例如「-ip」,「-mask」)時,必須有與每個成員關聯的值。使用這個值,而不是應該工作:
[{"-ip": "a.b.c.d", "-mask": "a.b.c.d" }, {"-ip": "a.b.c.d" ,"-mask": "a.b.c.d" }]
也請注意,您在上面的查詢中,您將更新一個名爲「名稱」的屬性,而例如文檔中的屬性名稱是「-name」(與減號前面)。要在開始時使用帶有減號的屬性名稱,它需要在AQL的反引號中引用(見下文)。
另外,示例文檔在子屬性「Node」中具有屬性「-name」和「Interface」,而UPDATE命令將更新文檔頂層的屬性「name」和「Interface」。
我已經調整了一下查詢。下面的序列似乎從ArangoShell工作:
db._create("Node");
db.Node.save({
"_key": "test",
"Node": {
"someAttribute": "someValue",
"-name": "Dev6",
"Interface": [
{
"-ip": "10.20.18.65",
"-mask": "255.255.255.192"
},
{
"-ip": "10.20.18.129",
"-mask": "255.255.255.192"
}
]
}
});
dbs_update_Node_by_key = 'FOR u IN Node FILTER u._key == @key ' +
'UPDATE u WITH { Node: { `-name`: @name, Interface: @Interface } } IN Node';
bind_args = {
key: "test",
name: "Dev8",
Interface: [
{
"-ip": "8.8.8.8",
"-mask": "255.255.255.192"
},
{
"-ip": "192.168.0.1",
"-mask": "255.255.255.255"
}
]
};
db._query(dbs_update_Node_by_key, bind_args);
db.Node.toArray();
這將產生:
[
{
"_id" : "Node/test",
"_key" : "test",
"_rev" : "18996044030550",
"Node" : {
"-name" : "Dev8",
"someAttribute" : "someValue",
"Interface" : [
{
"-ip" : "8.8.8.8",
"-mask" : "255.255.255.192"
},
{
"-ip" : "192.168.0.1",
"-mask" : "255.255.255.255"
}
]
}
}
]
我不知道如果這是你需要什麼,但至少它會更新文件並覆蓋「接口「屬性與新的值。
謝謝!根據你的建議我已經解決了。順便說一句,我認爲「 - 」不適合AQL。例如:'FOR u IN Node FILTER u.-AdminIP == @AdminIP RETURN u'不能被AQL解析。 – Hansen 2014-10-03 12:37:21
是的,爲了在AQL中正確解析,需要將包含減號的屬性名稱包含在反引號中 – stj 2014-10-06 07:00:44