寻找一种从一组节点中找到关系的简洁方法

时间:2015-06-29 21:59:17

标签: neo4j graph-databases

我有一组节点,我想编写一个查询来查找这些节点之间存在的每个关系。

有什么建议吗?

我的第一个尝试是MATCH a- [rel] -b WHERE ...而我的WHERE子句将是我在节点集中所有id的OR。

有更好的主意吗?

2 个答案:

答案 0 :(得分:0)

你可以这样做:

var A = [60, 80, 82, 50, 80, 80];
var B = ['a', 'b', 'c', 'd', 'e', 'f'];

var result = _.unzip(_.sortBy(_.zip(A, B), '-0'));

var A_sorted = result[0]; // [82, 80, 80, 80, 60, 50]
var B_sorted = result[1]; // ["c", "b", "e", "f", "a", "d"]]

在这里,您将传递MATCH (a)-[rel]-() WHERE ID(a) IN {node_ids} RETURN rel, ID(rel), type(rel), ID(startNode(rel)), ID(endNode(rel)) parameter这是一个数组。

另请注意,如果Neo4j对节点进行碎片整理,则使用内部Neo4j ID进行长期节点引用可能会中断。

答案 1 :(得分:0)

在这些答案中,我假设您将ID列表作为名为ids的参数传递。

  1. 如果要排除从节点到自身的关系:

    MATCH (a)-[r]-(b)
    WHERE id(a) IN {ids} AND id(b) IN {ids} AND a <> b
    RETURN r;
    
  2. 如果要包含从节点到自身的关系:

    MATCH (a)-[r]-(b)
    WHERE id(a) IN {ids} AND id(b) IN {ids}
    RETURN r;