繁体   English   中英

Cypher-在节点之间添加关系,如果不存在则添加节点

[英]Cypher - Adding relationships between nodes and add the nodes if they do not exist

我正在尝试执行以下Cypher查询:

CREATE UNIQUE (
event:Event { 
    id : '94ECE7BE-882C-446B-94FE-9348E0DF5E08', 
    startTimestamp : 1370821057.000000, 
    endTimestamp : 1370907457.000000, 
    type : 2, 
    category : 1,
    privacy : 1,
    dressCode : 4 
}), 
event<-[:CREATOR]-(creator:User { 
    id : '55A1CA51-9489-41E1-8083-EC23E974E604', 
    type : 1, 
    email : 'something@gmail.com' 
});

除了我得到的是有点烦人的错误消息:

Think we should have better error message here? Help us by sending this query to cypher@neo4j.org.

此查询有什么问题?

谢谢

create unique需求需要一种关系来锚定您的模式。 我出于性能原因而假设,因为验证数据库中没有节点与查询中的节点匹配将是有问题的。 同样,您的查询在每次执行中都会创建一个新的User节点,这可能不是您想要的。

如果您已有创建者节点(例如,只有已知用户可以添加事件),则可以将其用作起点:

match creator:User where creator.id='unique' 
CREATE UNIQUE (
event:Event { 
    id : '94ECE7BE-882C-446B-94FE-9348E0DF5E08', 
    startTimestamp : 1370821057.000000, 
    endTimestamp : 1370907457.000000, 
    type : 2, 
    category : 1,
    privacy : 1,
    dressCode : 4 
})<-[:CREATOR]-(creator) 

下一个2.0里程碑可能会在类型上添加唯一的约束。

如果确实要创建新的creator节点,则一种解决方法是将所有事件附加到专用锚点,但这将为您提供一个密集的节点,随着时间的推移,该节点将降低查询速度:

start n=node(0) CREATE UNIQUE n-[r:FOO]- (
event:Event { 
    id : '94ECE7BE-882C-446B-94FE-9348E0DF5E08', 
    startTimestamp : 1370821057.000000, 
    endTimestamp : 1370907457.000000, 
    type : 2, 
    category : 1,
    privacy : 1,
    dressCode : 4 
})<-[:CREATOR]-(creator:User { 
    id : '55A1CA51-9489-41E1-8083-EC23E974E604', 
    type : 1, 
    email : 'something@gmail.com' 
}) return event, creator

所以最好不要这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM