OrientDB:单次查询

时间:2017-04-18 12:14:05

标签: orientdb

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

示例:

   Performs    Uses          RunsOn    IsConnected 

用户 - >过程 - >申请 - >服务器 - >网络

此处,用户/进程/应用程序/服务器/网络是顶点名称
       执行/使用/ RunsOn / IsConnected是边缘名称/关系名称        osType / applicationName是相关Vertex的属性名称

现在,我希望根据输入获得所有相关的组合结果。如果输入类似于Server的osType和Application的applicationName,那么我想要所有与这两个输入相关的详细信息,例如user和process以及与此applicationName和osType相关的任何内容。

在orientdb中可以在单个查询中获取所有这些细节吗?

1 个答案:

答案 0 :(得分:1)

如果你想要单列

 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