Http ArangoDB-图形创建基础

Http ArangoDB-图形创建基础,http,graph-databases,arangodb,Http,Graph Databases,Arangodb,我是ArangoDB的新手。我熟悉Neo4J,但被ArangoDB的性能和多模型设计所吸引。文档似乎很深,但我在开始时遇到了问题 我想知道一个简单的方法来做一些基本的图形操作。到目前为止,我所发现的一切告诉我如何将整个集合连接在一起,但我希望能够简单地定义一个节点,定义另一个节点,并定义它们之间的边 理想情况下,通过HTTP,我如何: 将节点添加到图形中 在我添加到图形中的两个节点之间创建边 创建集合并将现有节点添加到该集合 作为一个例子,我想创建一个简单的图,如图中所示的树: 我想了解有

我是ArangoDB的新手。我熟悉Neo4J,但被ArangoDB的性能和多模型设计所吸引。文档似乎很深,但我在开始时遇到了问题

我想知道一个简单的方法来做一些基本的图形操作。到目前为止,我所发现的一切告诉我如何将整个集合连接在一起,但我希望能够简单地定义一个节点,定义另一个节点,并定义它们之间的边

理想情况下,通过HTTP,我如何:

  • 将节点添加到图形中
  • 在我添加到图形中的两个节点之间创建边
  • 创建集合并将现有节点添加到该集合
作为一个例子,我想创建一个简单的图,如图中所示的树:

我想了解有关如何创建此图子集的基本说明。我想:

  • 在名为
    fleets
    的集合中创建名为
    airline0
    airline1
    的节点
  • 在名为
    planes
    的集合中创建节点
    plane0
    plane1
    plane2
    -在每个平面的文档中放置一个任意属性——比如说颜色
  • 在名为
    pilots
    的集合中创建名为
    Jennifer
    的节点
接下来,我想把图表连接起来。根据文档,看起来边本身就是文档,因此可以具有属性。我想创建以下边:

  • (airline0)-[owns]>(plane0)
  • (airline0)-[owns]->(plane1)
    此边缘自2013年起作为一个属性具有
  • (航线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…”创建的边集合使用匿名图。是的,您可以使用多个边集合进行遍历。由于评论的篇幅有限,因此可能更容易在