我真的很难把我的头绕着neo4j,我希望有人能帮我找到正确的方向。
基本上,我有一份可以称为事件的清单;这个事件可以说是指病人进出房间的情况。
每个事件都有一个唯一的标识符;它还有一个有关学生的标识符以及开始和结束时间(例如,学生在12:00进入房间,在12:05离开)和房间的标识符。
事件和数据可能沿着下面的一行看,列由管道分隔符分隔。
ID|SID|ROOM|ENTERS|LEAVES
1|1|BLUE|1/01/2015 11:00|4/01/2015 10:19
2|2|GREEN|1/01/2015 12:11|1/01/2015 12:11
3|2|YELLOW|1/01/2015 12:11|1/01/2015 12:20
4|2|BLUE|1/01/2015 12:20|5/01/2015 10:48
5|3|GREEN|1/01/2015 18:41|1/01/2015 18:41
6|3|YELLOW|1/01/2015 18:41|1/01/2015 21:00
7|3|BLUE|1/01/2015 21:00|9/01/2015 9:30
8|4|BLUE|1/01/2015 19:30|3/01/2015 11:00
9|5|GREEN|2/01/2015 19:08|2/01/2015 19:08
10|5|ORANGE|2/01/2015 19:08|3/01/2015 2:43
11|5|PURPLE|3/01/2015 2:43|4/01/2015 16:44
12|6|GREEN|3/01/2015 11:52|3/01/2015 11:52
13|6|YELLOW|3/01/2015 11:52|3/01/2015 17:45
14|6|RED|3/01/2015 17:45|7/01/2015 10:00可能提出的问题可以是:
学生参观了哪些房间?按什么顺序?
学生在房间之间的移动是什么样子的??学生离开y室时去哪个房间?
听起来很简单,但我把自己绑在了绳结上。
我开始为学生和房间创造独特的约束条件。
创建对(学生:学生)的约束断言student.id是唯一的
然后我在房间里也做了同样的事情。
然后我把学生装成
使用定期提交1000加载csv与标头从'file://c:/event.csv‘作为行合并(s:学生{id: line.SID});
我也做了同样的房间和访问。
我完全不知道如何建立关系,虽然能够回答上述问题。每个活动都列出了学生进入和离开房间的时间,但没有列出学生去的房间。从摘录开始,应该修改摘录,使其包含学生离开的房间吗?如果有人能帮助我了解我需要如何思考需要建立的关系,那将是非常感谢的。
干杯
发布于 2017-05-19 11:41:18
正如俗话说的那样,有不止一种方法可以剥去乌普河的皮--或者阻止一位法师。你可以这样做的一种方法(这是最简单的建模方法,海事组织)如下:
CREATE CONSTRAINT ON (s:Student) ASSERT s.studentID IS UNIQUE;
CREATE CONSTRAINT ON (r:Room) ASSERT r.roomID IS UNIQUE;
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///dorm.csv" as line fieldterminator '|'
MERGE (s:Student {studentID: line.SID})
MERGE (r:Room {roomID: line.ROOM})
CREATE (s)-[:VISIT {starttime: apoc.date.parse(line.ENTERS,'s',"dd/MM/yyyy HH:mm"), endtime: apoc.date.parse(line.LEAVES,'s',"dd/MM/yyyy HH:mm")}]->(r);
# What rooms has student x visited and in what order
MATCH (s:Student {studentID: "2"})-[v:VISIT]->(r:Room)
RETURN r.roomID,v.starttime ORDER BY v.starttime;
# What does the movement of students between rooms look like - to which room does students go to when they leave room y
MATCH (s:Student)-[v:VISIT]->(r:Room {roomID: "GREEN"})
WITH s, v
MATCH (s)-[v2:VISIT]->(r2:Room)
WHERE v2.starttime > v.endtime
RETURN s.studentID, r2.roomID, v2.starttime ORDER BY s.studentID, v2.starttime;因此,实际上,您只需要将、student、和 room 作为节点,而学生则访问,因为房间将构成这种关系(以输入/离开时间作为该关系的属性)。现在,您可以看到,对于第二个查询来说,这可能并不理想(尽管它确实有效)。另一种选择是让访问节点并将其链接到学生和房间(作为时间轴事件)。关于如何做到这一点,有很多例子。
希望这能帮上忙汤姆
https://stackoverflow.com/questions/44061303
复制相似问题