Http ArangoDB-图形创建基础
我是ArangoDB的新手。我熟悉Neo4J,但被ArangoDB的性能和多模型设计所吸引。文档似乎很深,但我在开始时遇到了问题 我想知道一个简单的方法来做一些基本的图形操作。到目前为止,我所发现的一切告诉我如何将整个集合连接在一起,但我希望能够简单地定义一个节点,定义另一个节点,并定义它们之间的边 理想情况下,通过HTTP,我如何:Http ArangoDB-图形创建基础,http,graph-databases,arangodb,Http,Graph Databases,Arangodb,我是ArangoDB的新手。我熟悉Neo4J,但被ArangoDB的性能和多模型设计所吸引。文档似乎很深,但我在开始时遇到了问题 我想知道一个简单的方法来做一些基本的图形操作。到目前为止,我所发现的一切告诉我如何将整个集合连接在一起,但我希望能够简单地定义一个节点,定义另一个节点,并定义它们之间的边 理想情况下,通过HTTP,我如何: 将节点添加到图形中 在我添加到图形中的两个节点之间创建边 创建集合并将现有节点添加到该集合 作为一个例子,我想创建一个简单的图,如图中所示的树: 我想了解有
- 将节点添加到图形中
- 在我添加到图形中的两个节点之间创建边
- 创建集合并将现有节点添加到该集合
- 在名为
的集合中创建名为fleets
和airline0
的节点李>airline1
- 在名为
的集合中创建节点planes
,plane0
,plane1
-在每个平面的文档中放置一个任意属性——比如说颜色plane2
- 在名为
的集合中创建名为pilots
的节点李>Jennifer
(airline0)-[owns]>(plane0)
此边缘自2013年起作为一个属性具有(airline0)-[owns]->(plane1)
(航线1)-[owns]>(飞机2)
(航线1)-[previouslyOwned]->(plane1)
介于:[19992013]
(plane0)-[Indeet]->(airline0)
(plane1)-[Indeet]->(airline0)
(plane1)-[wasindeet]->(airline1)
介于:[19992013]
(plane2)-[Indeet]->(airline1)
(詹妮弗)-[canfly]->(plane0)
(plane0)-[hasPilot]->(jennifer)
请告诉我如何通过HTTP创建这样的图形。如果不是HTTP,我想知道如何通过arangosh实现这一点。让我从arangosh开始,因为它更容易阅读。我将给出HTTP命令作为附录 ArangoDB壳牌公司 您需要上面提到的三个文档集“舰队”、“飞机”和“飞行员”,以及至少一个edge 集合来保存图形结构。如果您想遍历在“owns”、“infeet”和“canfly”之间跳跃的图形结构,我建议 使用一个集合“关系”并为边赋予属性“类型” 另一种解决方案是使用三个edge集合“owns”和“Incomet”以及“canfly”。为了提出更基于事实的建议,最好对您的用例有更多的了解
arangosh [_system]> db._create("fleets");
[ArangoCollection 139792431, "fleets" (type document, status loaded)]
arangosh [_system]> db._create("planes");
[ArangoCollection 140382255, "planes" (type document, status loaded)]
arangosh [_system]> db._create("pilots");
[ArangoCollection 140972079, "pilots" (type document, status loaded)]
arangosh [_system]> db._createEdgeCollection("relations");
[ArangoCollection 141103151, "relations" (type edge, status loaded)]
接下来,在集合“fleets”中创建文档。我将使用航空公司的名称作为密钥。根据您的用例,可能有更好的键。例如,可能有一个通用缩写(如汉莎航空的LH)
对飞机和飞行员重复相同的步骤:
arangosh [_system]> db.planes.save({ _key: "plane0", name: "Plane Zero", color: "red" })
arangosh [_system]> db.planes.save({ _key: "plane1", name: "Plane One", color: "red" })
arangosh [_system]> db.planes.save({ _key: "plane2", name: "Plane One", color: "green" })
arangosh [_system]> db.pilots.save({ _key: "jennifer", name: "Jenifer" });
您应该根据您的用例选择键。如果没有“自然”关键点,则省略“\u关键点”属性。ArangoDB将为您生成一个唯一的密钥
接下来,添加上面创建的节点之间的关系。Arangodb2.8中的语法类似于上面创建的文档。此外
您需要提供要连接的顶点的“from”和“to”键
arangosh [_system]> db.relations.save("fleets/airline0", "planes/plane0", { type: 'owns' });
arangosh [_system]> db.relations.save("fleets/airline0", "planes/plane1", { type: 'owns', since: 2013 });
arangosh [_system]> db.relations.save("fleets/airline1", "planes/plane2", { type: 'owns' });
arangosh [_system]> db.relations.save("fleets/airline1", "planes/plane1", { type: 'previouslyOwned', begin: 1999, end: 2013 });
arangosh [_system]> db.relations.save("pilots/jennifer", "planes/plane0", { type: 'canfly' });
如果'inFlexet'/'wasinFlexet'/'hasPilot'与'owns'/'previouslyOwned'/'canfly'相反,则不需要为其创建单独的边,因为边是定向的
如果“owns”和“Incomet”之间存在差异,您可以创建与上述类似的关系:
arangosh [_system]> db.relations.save("planes/plane0", "fleets/airline0", { type: 'inFleet' });
...
现在,为了遵循“jennifer可以驾驶airlineY拥有的planeX”的路线,请使用:
或者要反转路径(不使用“Infoet”和“hasPilot”):
HTTP
让我给您举一个例子,说明上面执行的各种类型的命令
arangosh [_system]> db._create("fleets");
这意味着
curl -X POST --data-binary @- --dump - http://localhost:8529/_api/collection <<EOF
{
"name" : "fleets"
}
EOF
curl -X POST --data-binary @- --dump - http://localhost:8529/_api/collection <<EOF
{
"name" : "relations", "type": 3
}
EOF
curl -X POST --data-binary @- --dump - http://localhost:8529/_api/document?collection=products <<EOF
{ "_key": "airline0", "name": "Airline 0" }
EOF
curl -X POST --data-binary @- --dump - http://localhost:8529/_api/edge/?collection=relations&from=pilots/jennifer&to=planes/plane0 <<EOF
{
"type" : "canfly"
}
EOF
转化为
curl -X POST --data-binary @- --dump - http://localhost:8529/_api/collection <<EOF
{
"name" : "fleets"
}
EOF
curl -X POST --data-binary @- --dump - http://localhost:8529/_api/collection <<EOF
{
"name" : "relations", "type": 3
}
EOF
curl -X POST --data-binary @- --dump - http://localhost:8529/_api/document?collection=products <<EOF
{ "_key": "airline0", "name": "Airline 0" }
EOF
curl -X POST --data-binary @- --dump - http://localhost:8529/_api/edge/?collection=relations&from=pilots/jennifer&to=planes/plane0 <<EOF
{
"type" : "canfly"
}
EOF
转化为
curl -X POST --data-binary @- --dump - http://localhost:8529/_api/collection <<EOF
{
"name" : "fleets"
}
EOF
curl -X POST --data-binary @- --dump - http://localhost:8529/_api/collection <<EOF
{
"name" : "relations", "type": 3
}
EOF
curl -X POST --data-binary @- --dump - http://localhost:8529/_api/document?collection=products <<EOF
{ "_key": "airline0", "name": "Airline 0" }
EOF
curl -X POST --data-binary @- --dump - http://localhost:8529/_api/edge/?collection=relations&from=pilots/jennifer&to=planes/plane0 <<EOF
{
"type" : "canfly"
}
EOF
转化为
curl -X POST --data-binary @- --dump - http://localhost:8529/_api/collection <<EOF
{
"name" : "fleets"
}
EOF
curl -X POST --data-binary @- --dump - http://localhost:8529/_api/collection <<EOF
{
"name" : "relations", "type": 3
}
EOF
curl -X POST --data-binary @- --dump - http://localhost:8529/_api/document?collection=products <<EOF
{ "_key": "airline0", "name": "Airline 0" }
EOF
curl -X POST --data-binary @- --dump - http://localhost:8529/_api/edge/?collection=relations&from=pilots/jennifer&to=planes/plane0 <<EOF
{
"type" : "canfly"
}
EOF
curl-X POST--data binary@--dump-http://localhost:8529/_api/edge/?collection=relations&from=pilots/jennifer&to=planes/plane0 完美的非常感谢。在更深入地查看文档后,我发现了其中的一些内容,但直到刚才我才清楚地了解到遍历过程。我想了解更多关于单边缘收藏与多边缘收藏的优势。我可以遍历多个边集合吗?或者我只能在一个范围内进行遍历?另一个问题:图形。\u addVertexCollection
和db.\u create
?ArangoDB支持命名和未命名图形。命名图是使用“graph…”创建的。还可以使用使用“db…”创建的边集合使用匿名图。是的,您可以使用多个边集合进行遍历。由于评论的篇幅有限,因此可能更容易在