neo4j / cypher中的情况。
我有两个代表 person (标签)的节点,以及 friendship (label)节点之间的关系。友谊包含他们第一次见面,上次他们 遇到了,以及他们共同完成的事情。
如果节点不存在,我想添加节点,如果节点也不存在,也将它添加到数据库中。
这是我想在密码中做的事情。我已经取得了大部分成功,但是我做错了。而且,如果我没弄错的话,就没有办法比较Cypher中的日期时间对象,所以我保存Unix time。
bars.transform_window(window=[alt.WindowFieldDef(op='count',
field='Sport:N',
**{'as':'cardinality'})],
frame=[None, None])
bars.transform_window(window=[alt.WindowFieldDef(op='rank',
field='cardinality',
**{'as':'rank'})],
frame=[None, None],
sort=[alt.WindowSortField(field='rank',
order='descending')])
bars.transform_filter( ..... what??? .....)
在这里,我创造了不存在的东西。如果友谊存在与否会怎么样?
merge (p:Person {name:”Thomas”}) merge (p2:Person {name:”George”}) merge (p)-[r:FRIEND {}]-(p2)
on create set r.activities = [“eat”], r.firstMeet = 123456, r.lastMeet = 123456
当然是on match set r.activities = r.activities + “play” where not “play” in r.activities, r.lastMeet = 456789 where r.lastMeet < 456789
,eat
,play
。可以在某个项目中输入123456
,这是查询的示例。
问题在于,使用456789
where
后{c} set
问题导致我遇到问题。也许这不是正确的方式。我搜索了很多,包括这个网站,但没有找到可以提供帮助的东西。
答案 0 :(得分:2)
这样的事情应该有效:
WITH timestamp() AS datetime
MERGE (p:Person {name: $p1Name})
MERGE (p2:Person {name: $p2Name})
MERGE (p)-[r:FRIEND]-(p2)
ON CREATE SET r.activities = ['eat'], r.firstMeet = datetime, r.lastMeet = datetime
ON MATCH SET
r.activities = CASE WHEN $activity in r.activities
THEN r.activities
ELSE r.activities + $activity END,
r.lastMeet = datetime;
我假设您传入parameters p1Name
,p2Name
和activity
,并且可以使用当前的纪元时间(以毫秒为单位,由timestamp()
函数生成的)为您的会议时间。