在一个查询中返回顶点和边属性
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`
我正在使用 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`