OrientDB:单次查询

OrientDB : Single shot Query

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

示例:

   Performs    Uses          RunsOn    IsConnected 

用户 --> 进程 --> 应用程序 --> 服务器 --> 网络

这里,User/Process/Application/Server/Network是顶点名称
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

这仅适用于终端节点,即。只有一个连接的节点。

完整参考:http://orientdb.com/docs/2.2.x/SQL-Match.html