当前位置: 首页 > 知识库问答 >
问题:

使用Cypher使用整数数组在Neo4j中创建多个关系

金健
2023-03-14

我是Neo4j和Cypher的新手,刚刚导入了两个CSV--一个是地点列表,另一个是人员列表。

每个地方都有多个访问过它的人的peopleIDs,存储为数组中的整数。

类似地,每个人都有多个他们访问过的地方的Placeid,这些地方存储在一个数组中。

MATCH (p1:People),(p2:Place)
WHERE p1.placeID = p2.placeID
CREATE (p1)-[:VISIT]->(p2)

共有1个答案

宇文飞羽
2023-03-14

您没有使用导入数据的最佳策略。在graph DB中,存储仅用于以后创建关系的数据(如ID列表)不是一个好的做法。这会给您留下大量的冗余数据,这些数据将永远不会再被使用(理想情况下应该删除)。

一个更好的策略包括三个步骤:

>

  • people文件导入节点,但忽略位置ID列表

    place文件导入节点,但忽略人员ID列表

    从其中一个文件中导入关系(我假设哪个并不重要)。例如,我假设我们选择Place文件,并且每个文件行都有一个ID字段,其中有一个Place的ID和一个People字段,该字段包含一个分号分隔的People ID集合。这样的查询将创建所有需要的关系(并避免创建重复关系):

    LOAD CSV WITH HEADERS FROM 'file:///places.csv' AS row
    MATCH (place:Place) WHERE place.id = row.id
    MATCH (person:People) WHERE person.id IN SPLIT(row.peopleIds, ';')
    MERGE (person)-[:VISIT]->(place)
    

  •  类似资料:
    • 我试图在Neo4j中创建节点之间的关系。我正在使用Neo4J(2.1.8社区) 我试图创建以下关系。 创建一个新的员工(节点),它将向DB中的Manager(节点)报告(空关系)(按名称搜索)。我使用了下面的查询。 我得到了下面的错误。 谁能告诉我这个问题出了什么问题?另外,如果这不是使用GraphRespository创建关系的正确方法,那么我还可以使用什么来实现同样的目的呢。 提前感谢。 注意

    • 我如何比较用户输入的这些数组呢?

    • 我想使用Spring数据Neo4j在Neo4j中建模一个包含公司及其业务关系的图。所以我为公司创建了节点,为业务关系创建了边缘。然而,有一系列不同类型的关系(买方、供应商、制造商等,还有一种通用版本“与之做生意”)。每个关系只有一个属性,即目标公司的源公司的内部ID,例如,买方有每个供应商的内部ID。每一对公司在每个方向上都可以有一种类型的关系。 我建立这种关系的方式是为公司设立一个@NodeEn

    • 我有一个CSV数据集,我试图通过它在数据库中已经存在的两个节点类型(和)之间建立关系。 这是数据库信息- 问题是--无论我尝试哪个密码查询,它们都返回相同的东西--“无更改,无行”。 此查询只返回“no rows”。 我还尝试了该查询的一个变体,其中我没有使用函数,但这并没有什么不同。 为了确保节点存在,我从CSV文件中选择了随机单元格值,并使用子句来确保数据库中存在相应的和节点,并且找到了所有节

    • 问题内容: 所以这是我必须编写的第一个真正的Java程序。我对Java也相当陌生。 该程序必须使用2个命令行参数(假定是x和y坐标)运行,然后确定坐标位于哪个城市和县。为此,我想使用一个“卷号”。 但是,在我可以从程序的那些部分开始之前,我首先需要创建并填充不同的数组,对吗? .txt文件包含以下内容:(所有地点和坐标都在荷兰顺便说一句)ID号县辖市。例如: 0格罗宁根哈伦 1格罗宁根韭菜 对于前

    • 问题内容: 我想在Python(2.7)中创建一个3D数组,以便像这样使用: 数组的大小应该是我拥有的变量的大小。(n n n) 我尝试使用: 但这似乎不起作用。 我只能使用默认库,并且乘法(即)的方法将不起作用,因为它们链接到相同的指针,并且我需要所有值都是单独的 问题答案: 您应该使用列表理解: 您本可以使用一个看起来像您尝试过的语句来生成数据结构,但是由于内部列表是按引用复制的,因此它会产生