arangodb
2014-10-02 52 views 1 likes 
1

我有一個這樣的文檔。插入數組值在ArangoDB中

{ 「節點」:{ 「-name」: 「DEV6」, 「接口」:[{ 「-ip」: 「10.20.18.65」, 「-mask」:「255.255。 255.192" },{ 「-ip」: 「10.20.18.129」, 「-mask」: 「255.255.255.192」 } ] } }

我的Perl程序以下。

my $dbs_update_Node_by_key ='FOR u IN Node FILTER u._key == @key UPDATE u WITH { 
    name: @name, 
    Interface: @Interface 
} IN Node'; 

...... 
(comments: $inf means [{"-ip","-mask"},{"-ip","-mask"}]) 

my $bind_args = { 
key => $doc->{'_key'}, 
name => $node_attrs->{'-name'}, 
Interface => $inf 
}; 

$sth = $itdb->query($dbs_update_Node_by_key)->bind($bind_args)->execute(); 

它返回「無效的綁定參數值」。我認爲ArangoDB perl驅動程序不支持它。 如何使用AQL或REST API來實現它?謝謝!

回答

1

我認爲這個問題是

[{"-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" 
     } 
     ] 
    } 
    } 
] 

我不知道如果這是你需要什麼,但至少它會更新文件並覆蓋「接口「屬性與新的值。

+0

謝謝!根據你的建議我已經解決了。順便說一句,我認爲「 - 」不適合AQL。例如:'FOR u IN Node FILTER u.-AdminIP == @AdminIP RETURN u'不能被AQL解析。 – Hansen 2014-10-03 12:37:21

+0

是的,爲了在AQL中正確解析,需要將包含減號的屬性名稱包含在反引號中 – stj 2014-10-06 07:00:44

相關問題