在一个查询中返回顶点和边属性

Returning vertex and edge properties in one query

我正在使用 OrientDb 3.0.1。

假设以下架构:

CREATE CLASS Product EXTENDS V;
CREATE PROPERTY Product.number STRING (MANDATORY, NOTNULL);

CREATE CLASS Object3D EXTENDS V;
CREATE PROPERTY Object3D.path STRING (NOTNULL);

CREATE CLASS has_Object3D EXTENDS E;
CREATE PROPERTY has_Object3D.in LINK Object3D (MANDATORY, NOTNULL);
CREATE PROPERTY has_Object3D.out LINK V (MANDATORY, NOTNULL);
CREATE PROPERTY has_Object3D.translation EMBEDDEDLIST INTEGER (MANDATORY, NOTNULL);

还有一些数据,例如:

INSERT INTO Product (number) VALUES
('1'), ('2'), ('3');

INSERT INTO Object3D (path) VALUES
("path1"), ("path2"), ("path3");

CREATE EDGE has_Object3D
FROM (SELECT FROM Product WHERE number = '1')
TO (SELECT FROM Object3D WHERE path = 'path1')
SET translation = [0, 0, 0];

问题: 只知道产品编号,如何从Object3D顶点和相应的[=中获取属性both 14=] 一次查询中的边缘?

像这样的东西(不工作):

SELECT
  expand(out('has_Object3D')),
  outE('has_Object3D').translation
FROM Product
WHERE number = '1';

谢谢。

试试这个:

select out('has_Object3D').path as path, outE('has_Object3D').translation as translation from Product where number = "1"

这是输出:

+----+-------+-----------+
|#   |path   |translation|
+----+-------+-----------+
|0   |[path1]|[[0,0,0]]  |
+----+-------+-----------+



更新

select out('has_Object3D').path as path, outE('has_Object3D').translation as translation from Product where number = "1" unwind path, translation

这是输出:

+----+-----+-----------+
|#   |path |translation|
+----+-----+-----------+
|0   |path1|[0,0,0]    |
+----+-----+-----------+

希望对您有所帮助

此致

然而,@michela-bonizzi 发布的答案有效,当顶点之间有多个边时,可能会出现问题。

以下查询更通用,也按预期工作。

MATCH {class: has_Object3D, as: e}.outV() {where: (number = '1')}
RETURN 
  e.inV().path AS `path`,
  e.translation AS `translation`