1

我正在尝试执行以下 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.

这个查询有什么问题?

谢谢

4

1 回答 1

1

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

如果您有现有的创建者节点(例如,只有已知用户可以添加事件),您可以使用它作为起点:

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

所以最好不要那样做。

于 2013-06-09T09:52:50.610 回答