Neo4j将多个值存储为属性并基于该属性匹配节点
我有一个标签Neo4j将多个值存储为属性并基于该属性匹配节点,neo4j,cypher,Neo4j,Cypher,我有一个标签Person,其中节点具有某些属性(姓名、姓氏等),我有一个标签Company,其中节点具有某些属性(姓名、公司编号等)。现在,我需要将propertycompNumber添加到person节点,该节点将指示此人在哪些公司工作。 我的问题是:例如,有没有一种方法可以在属性compNumber中放入多个值 (:Person {forename:John, surname'Smith', compNumber:[001,002,003]}) 如果companyNumber节点中的属性c
Person
,其中节点具有某些属性(姓名、姓氏等),我有一个标签Company
,其中节点具有某些属性(姓名、公司编号等)。现在,我需要将propertycompNumber
添加到person节点,该节点将指示此人在哪些公司工作。
我的问题是:例如,有没有一种方法可以在属性compNumber中放入多个值
(:Person {forename:John, surname'Smith', compNumber:[001,002,003]})
如果companyNumber
节点中的属性companyNumber
与compNumber
属性中的一个值匹配,则以后在中建立一个关系
或者,将compNumber
值存储为单独节点的更好方法是:
(:Person {forename:John, surname:Smith})-[:HAS_NUMBER]->(:Number {compNumber:001})
(:Person {forename:John, surname:Smith})-[:HAS_NUMBER]->(:Number {compNumber:002})
(:Person {forename:John, surname:Smith})-[:HAS_NUMBER]->(:Number {compNumber:003})
是的,你可以按你想要的方式做。在Neo4j中,可以使用以下命令设置数组属性:
CREATE (:Person {forename:'John', surname:'Smith', compNumber:[1,2,3]});
您可以使用IN关键字搜索特定节点:
MATCH (n:Person) WHERE 1 IN n.compNumber RETURN n;
然后可以通过以下方式创建关系:
MATCH (n:Company) MATCH (p:Person) WHERE n.companyNumber IN p.compNumber MERGE (p)-[:WORKS_IN]->(n);
我认为这个解决方案应该适合您的需要。是的,您可以按照自己的方式来做。在Neo4j中,可以使用以下命令设置数组属性:
CREATE (:Person {forename:'John', surname:'Smith', compNumber:[1,2,3]});
您可以使用IN关键字搜索特定节点:
MATCH (n:Person) WHERE 1 IN n.compNumber RETURN n;
然后可以通过以下方式创建关系:
MATCH (n:Company) MATCH (p:Person) WHERE n.companyNumber IN p.compNumber MERGE (p)-[:WORKS_IN]->(n);
我认为此解决方案应该适合您的需要。是否有某些原因使您无法与具有给定公司编号的公司建立关系,如果尚未存在具有给定公司编号的公司,则根据需要创建新的公司节点?是否有一些原因使您无法与具有给定公司编号的公司建立关系,如果尚未存在具有给定公司编号的公司,是否根据需要创建新的公司节点?