最近,我尝试使用以下代码填充neo4j测试数据库:
WITH ["Paul","Graham","Voord","Heisenberg","Earles","Grey","Herzog","Griffith","Rogers","Huxley","Waldorf","Astor","Mellon","Humphrey","Messerschmidt","Carmichael","Buchanan","Dalton","Valentino","Meyerholz","Ellington","Abernathy","Harrington","Monroe","Rutherford","Vanderbilt","Montgomery","Worthington","Fitzwilliam","Covington","Hollingsworth"]
AS names,
["Associates",""]
AS suffixes
FOREACH (r IN range(0,49) | CREATE (:Societe {id:10000+r, name:names[r % size(names)]+" & "+names[(r+3) % size(names)]+" "+suffixes[r % size(suffixes)]}));
FOREACH (r IN range(0,99) | CREATE (:Dossier {id:20000+r, Numero:"0"+(r*4)+100}));
MATCH (s:Societe),(d:Dossier)
WITH s,d
WHERE rand() < 0.1
CREATE (s)-[:CONTAINS]->(d);但是,正如你可能已经猜到的,最后四行在我的(:档案)和我的(:社交)之间建立了n到n的关系。我最初想要的是在这两者之间建立一个1到n的关系,这样一个(:档案)最多可以链接到一个(:Societe)。
知道怎么做吗?
谢谢。
发布于 2014-07-29 20:44:58
尼古拉斯
这里有一些Cypher来代替你最后的4行,这可能会让你达到你想去的地方。
MATCH (s:Societe)
WITH s
MATCH (d:Dossier)
WHERE NOT (d)<-[:CONTAINS]-() AND RAND() < 0.1
CREATE (s)-[:CONTAINS]->(d);
MATCH (d:Dossier)-[r:CONTAINS]-()
WITH d, collect(r) AS rels1
WITH d, rels1[1..] AS rels2
FOREACH(q IN rels2 | DELETE q)第一部分减少了互连的数量,但没有使1比n(这让我感到困惑,但这就是它的方式)。第二部分梳理这些关系,以便每个档案都与法国兴业银行( societe )相关。你可能会有没有分配给兴业银行的档案,但你可以找到和删除那些。
恩惠与和平
吉姆
发布于 2014-07-30 08:48:24
你可以过滤掉已经有一个法国兴业银行的档案。
MATCH (s:Societe), (d:Dossier)
WITH s,d
WHERE rand() < 0.1 and NOT (s)-[:CONTAINS]->()
CREATE (s)-[:CONTAINS]->(d);https://stackoverflow.com/questions/25018248
复制相似问题