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
这仅适用于终端节点,即。只有一个连接的节点。
我对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
这仅适用于终端节点,即。只有一个连接的节点。