OrientDB:单次快照查询

OrientDB:单次快照查询,orientdb,Orientdb,我对orientdb中的查询有一些疑问。我有以下情况: 例如: Performs Uses RunsOn IsConnected 用户-->进程-->应用程序-->服务器-->网络 这里,用户/进程/应用程序/服务器/网络是顶点名称 Performs/Uses/RunsOn/IsConnected是边缘名称/关系名称 osType/applicationName是相关顶点的属性名称 现在,我想要根据输入得到所有相关的组合结果。如果输入类似于服务器的osTy

我对orientdb中的查询有一些疑问。我有以下情况:

例如:

   Performs    Uses          RunsOn    IsConnected 
用户-->进程-->应用程序-->服务器-->网络

这里,用户/进程/应用程序/服务器/网络是顶点名称
Performs/Uses/RunsOn/IsConnected是边缘名称/关系名称 osType/applicationName是相关顶点的属性名称

现在,我想要根据输入得到所有相关的组合结果。如果输入类似于服务器的osType和应用程序的applicationName,那么我需要与这两个输入相关的所有详细信息,如用户和进程,以及与此applicationName和osType相关的任何内容


在orientdb中,可以在单个查询中提取所有这些详细信息???

如果需要单个列

 MATCH
  {as:user} -Performs-> {as:process} -Uses->
  {class:Application, as:app, where:(applicationName = ?)} -RunsOn->
  {class:Server, as:server, where:(osType = ?)} -IsConnected-> {as:network}
 RETURN user.name, process.id, app.name, server.url, server.name, network.name 
如果您只需要相关元素的RID:

 MATCH
   {as:user} -Performs-> {as:process} -Uses->
   {class:Application, as:app, where:(applicationName = ?)} -RunsOn-> 
   {class:Server, as:server, where:(osType = ?)} -IsConnected-> {as:network}
 RETURN user, process, app, server, network
如果您还希望所有详细信息都在行中:

 SELECT user.* as user_, process.* as process_, app.* as app_, server.* as server_, network.* as network_ FROM (
   MATCH
     {as:user} -Performs-> {as:process} -Uses->
     {class:Application, as:app, where:(applicationName = ?)} -RunsOn->      
     {class:Server, as:server, where:(osType = ?)} -IsConnected-> {as:network}
   RETURN user, process, app, server, network
 )
“as xxx_”将为属性添加一个前缀,这有助于避免冲突,例如,如果您有user.name和server.name,这样您将有“user_name”和“server_name”

如果不需要所有模式,但只需要作为结果一部分的单个记录:

 MATCH
   {as:user} -Performs-> {as:process} -Uses->
   {class:Application, as:app, where:(applicationName = ?)} -RunsOn-> 
   {class:Server, as:server, where:(osType = ?)} -IsConnected-> {as:network}
 RETURN $elements
如果有多个路径连接到同一节点,则可以使用逗号分隔的模式,使用别名连接,例如

MATCH
 {as:user} -Performs-> {as:process} -Uses->
 {class:Application, as:app, where:(applicationName = ?)} -RunsOn-> 
 {class:Server, as:server, where:(osType = ?)} -IsConnected-> {as:network},
 {as:server} -IsMountedOn-> {as:storage}
RETURN $elements
如果一个或多个(终端)连接丢失,您可以将其定义为可选连接,例如,如果存储可能丢失:

MATCH
 {as:user} -Performs-> {as:process} -Uses->
 {class:Application, as:app, where:(applicationName = ?)} -RunsOn-> 
 {class:Server, as:server, where:(osType = ?)} -IsConnected-> {as:network},
 {as:server} -IsMountedOn-> {as:storage, optional:true}
RETURN $elements
这仅适用于终端节点,即只有一个连接的节点


此处的完整参考:

感谢您的快速响应。我在某个地方一直在寻找相同的结果。如果我们有多个从属顶点,那么我们将如何将其放入相同的查询中,例如服务器安装在存储上,服务器连接到网络。在原始回答中添加了一个示例,但我无法回答了解如何为同一个服务器定义另一个3关系,比如我正在执行{as:Server}-IsMountedOn->{as:Storage}-IsConnectedTo->{as:Network},但它不工作,因为这个网络与服务器直接相关。哦,我的错…得到了…谢谢。。。!!它不是在所有情况下都工作…我们有两个服务器记录,但是如果一个服务器没有连接到网络,那么它不会返回任何结果。在匹配条件下是否可以检查顶点之间是否存在任何关系,但仍将返回结果。