gpt4 book ai didi

neo4j - Cypher neo4j 的 ON MATCH 中的条件 SET

转载 作者:行者123 更新时间:2023-12-05 05:16:07 24 4
gpt4 key购买 nike

neo4j/cypher 中的情况。

我有两个节点代表一个(标签),节点之间的关系是友谊(标签)。友谊包括他们第一次见面,最后一次认识,以及他们一起做过的事情。

如果节点不存在,我想添加它们,如果关系也不存在,也将其添加到数据库中。

  • 如果友谊不存在,我会创建它并添加他们一起进行的事件以及他们第一次见面的时间。
  • 如果友谊确实已经存在,我将事件添加到数组如果它不存在(我不想重复事件)。同时更新他们最后一次见面的时间。

这是我想用 cypher 做的事情。我已经成功了大部分,但是我做错了什么。此外,如果我没记错的话,Cypher 中没有办法比较日期时间对象,所以我保存了 Unix time

merge (p:Person {name:”Thomas”}) merge (p2:Person {name:”George”}) merge (p)-[r:FRIEND {}]-(p2)

在这里,我创造了不存在的东西。如果友谊存在或不存在怎么办?

创建集 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 

当然是123456456789 可以在某些项目中输入,这是一个查询示例。

问题是密码让我对 set 之后的 where 子句和 on match 产生了疑问。也许这不是正确的方法。我搜索了很多,包括这个网站,但没有找到任何有用的东西。

最佳答案

像这样的东西应该可以工作:

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 p1Namep2Nameactivity,并且可以使用当前纪元时间(以毫秒为单位,由 timestamp() 函数)为您的 session 时间。

关于neo4j - Cypher neo4j 的 ON MATCH 中的条件 SET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50855611/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com