首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Neo4j的Cypher :只在填充数据库时创建1到n的关系

Neo4j的Cypher :只在填充数据库时创建1到n的关系
EN

Stack Overflow用户
提问于 2014-07-29 14:47:19
回答 2查看 66关注 0票数 1

最近,我尝试使用以下代码填充neo4j测试数据库:

代码语言:javascript
复制
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)。

知道怎么做吗?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-29 20:44:58

尼古拉斯

这里有一些Cypher来代替你最后的4行,这可能会让你达到你想去的地方。

代码语言:javascript
复制
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 )相关。你可能会有没有分配给兴业银行的档案,但你可以找到和删除那些。

恩惠与和平

吉姆

票数 3
EN

Stack Overflow用户

发布于 2014-07-30 08:48:24

你可以过滤掉已经有一个法国兴业银行的档案。

代码语言:javascript
复制
MATCH (s:Societe), (d:Dossier)
WITH s,d
WHERE rand() < 0.1 and NOT (s)-[:CONTAINS]->()
CREATE (s)-[:CONTAINS]->(d);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25018248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档