Neo4j(Cypher):基于与属性匹配的数组属性中的元素创建关系

时间:2015-04-24 02:38:39

标签: neo4j cypher

我想为Feature节点数组属性'aTags'中的任何'tag'创建一个关系,它等于Tag节点。我尝试过使用FOREACH和UNWIND而没有任何运气。

数据:

  1. (a)是具有标签属性数组的Feature节点。
    • a.aTags是一个类似于{1,2,3,4,5}
    • 的数组
  2. (b)是标记节点
    • b.tag匹配a.aTags中的单个元素
  3. 的Cypher:

    START a=node(*), b=node(*)
    FOREACH (a_tag IN a.aTags = b.tag |
        CREATE (a)-[:HAS_TAG]->(b) );
    

    提前感谢任何见解!

1 个答案:

答案 0 :(得分:1)

怎么样

match (a:Feature)
FOREACH (aTag in a.aTags | merge (b:Tag {name:aTag}) merge (a)-[:HAS_TAG]->(b));

但请注意,如果aTags中存在Tag节点尚不存在的值,则会创建b:Tag。

我使用

http://console.neo4j.org/r/xc8d0创建了一些数据
create (_0:`Tag` {`name`:"tagA"})
create (_1:`Tag` {`name`:"tagB"})
create (_2:`Tag` {`name`:"tagC"})
create (_3:`Tag` {`name`:"tagD"})
create (_4:`Feature` {`aTags`:["tagA"]})
create (_5:`Feature` {`aTags`:["tagB", "tagC"]})
create (_6:`Feature` {`aTags`:["tagA", "tagC"]})

如果这不是您的意思,请告诉我。