OrientDB SQL:如何找到顶点并在它们之间创建边?

复习

在我的数据库上,运行以下查询:

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)?

复习

这就是我最终要做的事情:

createEdges使用三个参数定义函数createEdges(from, to, type)

// Check whether "from" is invalid or empty
if (from instanceof java.util.Collection) {
  if (from.isEmpty()) {
    return [];
  } else {
    var it = from.iterator();
    var obj = it.next();
    if (!(obj instanceof com.orientechnologies.orient.core.id.ORecordId)) {
      throw "Bad Input: createdEdges() only accepts ORecordIds or Collections of ORecordIds";
    }
  } 
} else if (!(from instanceof com.orientechnologies.orient.core.id.ORecordId)) {
  throw "Bad Input: createdEdges() only accepts ORecordIds or Collections of ORecordIds";
}

// Check whether "to" is invalid or empty
if (to instanceof java.util.Collection) {
  if (to.isEmpty()) {
    return [];
  } else {
    var it = to.iterator();
    var obj = it.next();
    if (!(obj instanceof com.orientechnologies.orient.core.id.ORecordId)) {
      throw "Bad Input: createdEdges() only accepts ORecordIds or Collections of ORecordIds";
    }
  } 
} else if (!(to instanceof com.orientechnologies.orient.core.id.ORecordId)) {
  throw "Bad Input: createdEdges() only accepts ORecordIds or Collections of ORecordIds";
}

var g = orient.getGraph();
var cmd = "CREATE EDGE " + type + " FROM " + from + " TO " + to;

return g.command("sql", cmd);

uniq使用一个参数定义函数uniq(collection)

if (collection instanceof java.util.Collection) {
  if (collection.isEmpty()) {
    return collection
  } else {
    return new java.util.HashSet(collection)
  }
} else {
  throw "Bad Input: uniq() only accepts Java collections as input"
}

现在,我可以运行以下SQL命令:

SELECT createEdges(src, dst, 'RELIES_ON') FROM
(SELECT @rid AS src, uniq(out('USES').out('BELONGS_TO').@rid) AS dst FROM Modules)

这将在模块和它们依赖的项目之间创建独特的优势,而且速度非常快。

感谢@vitorenesduarte,他提供了最初的回应和主要灵感...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

多个顶点之间的OrientDb边

来自分类Dev

OrientDB创建顶点类型

来自分类Dev

如何遍历多个OrientDB顶点

来自分类Dev

OrientDB中的重复顶点和边

来自分类Dev

OrientDB SQL与Gremlin

来自分类Dev

错误函数SQL OrientDB

来自分类Dev

如何在OrientDB中按边数对顶点排序

来自分类Dev

在OrientDB中查询链接的顶点

来自分类Dev

Waterline-OrientDB-双向边

来自分类Dev

如何在Orientdb中使用HTTP创建顶点和边缘?

来自分类Dev

检查OrientDB中的类创建

来自分类Dev

OrientDB Traverse SQL查询效率

来自分类Dev

如何填充OrientDB时间序列?

来自分类Dev

OrientDB Studio代码如何工作?

来自分类Dev

使用UPPERT创建边,但在顶点类中,它在Orientdb中不显示任何内容

来自分类Dev

OrientDB包含来自连接顶点的属性

来自分类Dev

边缘和顶点属性的OrientDB组合

来自分类Dev

orientdb select不会返回所有顶点

来自分类Dev

在OrientDb中查找和删除重复的边

来自分类Dev

OrientDB 2.1.3:遍历带约束的边

来自分类Dev

OrientDB如何在一个查询中获得顶点及其边的结果集

来自分类Dev

Orientdb:创建新的Graph数据库

来自分类Dev

orientdb同时创建索引不能写

来自分类Dev

orientdb-如何过滤没有遍历的子顶点

来自分类Dev

OrientDB:如何获取特定类的相邻顶点

来自分类Dev

使用OrientDB图形API与SQL查询的性能

来自分类Dev

orientdb中提取数据的SQL查询建议

来自分类Dev

如何在OrientDB中应用独特查询?

来自分类Dev

OrientDB,如何检索以前的记录版本