在我的数据库上运行以下查询:
SELECT @rid AS module_rid, out('USES').out('BELONGS_TO').@rid AS project_rid FROM MODULES LIMIT 10
我收到了以下回复:
module_rid | project_rid
-----------|----------------
#12:0 | []
#12:1 | []
#12:2 | []
#12:3 |
#11:48677 | #11:48677 #11:48677 #11:48677 #11:48677 #11:48677 ..More(49)
#12:4 |
#11:48677 | #11:48677 #11:48677 #11:48677 #11:48677 #11:48677 ..More(49)
#12:5 |
#11:2526 | #11:2526 #11:2526 #11:47148 #11:47148 #11:25338 ..More(30)
#12:6 | []
如何在模块和它们所依赖的项目(它们至少使用项目的一个模块)之间创建边(例如 RELIES_ON)?
最佳答案
create class Module extends V
create class Project extends V
create class Uses extends E
create class ReliesOn extends E
create vertex Module set name = 'm1'
create vertex Module set name = 'm2'
create vertex Module set name = 'm3'
create vertex Project set name = 'p1'
create vertex Project set name = 'p2'
create vertex Project set name = 'p3'
create edge Uses from (select from Module where name = 'm2') to (select from Project where name = 'p1')
create edge Uses from (select from Module where name = 'm3') to (select from Project where name = 'p2')
create edge Uses from (select from Module where name = 'm3') to (select from Project where name = 'p3')
我知道上述情况与您的情况略有不同,但我相信这足以了解您问题的可能解决方案。
您可以定义一个函数createEdges,例如:
var gdb = orient.getGraph();
if(to.size() != 0){
var command = "create edge ReliesOn from " + from + " to " + to;
gdb.command("sql", command);
}
return;
现在以下查询将在创建边时查找顶点:
select from (
select @rid as module_rid, out('Uses').@rid as project_rid from Module
)
let $ce = createEdges(module_rid, project_rid)
更新:
如果您想确保“to”不包含重复项,您可以:
select from (
select @rid as module_rid, $aux[0].set.@rid as project_rid from Module
let $aux = ( select set(out('Uses')) from $current )
)
let $ce = createEdges(module_rid, project_rid)
关于sql - 东方数据库 SQL : How to find vertices and create edges between them?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29613647/