1

我使用以下密码查询在图中创建了两组节点

制药集团

CREATE ( p1:pharma { name: " Magnesium ", id: " 12 " } ) 
CREATE ( p2:pharma { name: " Hyoscine Butylbromide ", id: " 22 " } ) 
CREATE ( p3:pharma { name: " Propantheline Bromide ", id: " 23 ",  } );

工业集团

CREATE ( i1:ind { id: '1', name: 'Dyspepsia',  pdfk: '12'}) 
CREATE ( i2:ind { id: '5', name: 'Symptomic relief of intestinal disorder', pdfk: '22'}) 
CREATE ( i3:ind { id: '6', name: 'Symptomic relief of disorder', pdfk: '22'}) 
CREATE ( i4:ind { id: '7', name: 'Bowel colic', review: 'False', pdfk: '23'});

它就像关系数据库表一样,现在我想定义这两组节点之间的关系..

关系 like = node in pharma with id 12 有一个关系名称 HAS_IND 与 ind 中的节点 id 1 ?

像这样的地方

MATCH (a:pharma),(b:ind)
WHERE a.id = '12' AND b.id = '1'
CREATE (a)-[:has_ind]->(b);

我也试过这些

MATCH (a:pharmaDrug),(b:indication)
WHERE a.name = 'Magnesium Carbonate' AND b.name = 'Dyspepsia'
CREATE (a)-[:has_indication]->(b);

但两者都在控制台中在 530 毫秒内返回 0 行?

请帮助我为此目的找到正确的密码查询。提前致谢。

==================================================== =======================

我的更改如下

CREATE ( p1:pharma { name: "Magnesium", id: 12 } ) 
CREATE ( p2:pharma { name: "Hyoscine Butylbromide", id: 22 } ) 
CREATE ( p3:pharma { name: "Propantheline Bromide", id: 23 } );




CREATE ( i1:ind { id: 1, name: 'Dyspepsia',  pdfk: '12'}) 
CREATE ( i2:ind { id: 5, name: 'Symptomic relief of intestinal disorder', pdfk: '22'}) 
CREATE ( i3:ind { id: 6, name: 'Symptomic relief of disorder', pdfk: '22'}) 
CREATE ( i4:ind { id: 7, name: 'Bowel colic', review: 'False', pdfk: '23'});

这会在两个标签下创建节点

MATCH (a:pharma),(b:ind)
WHERE a.id = ' 12 ' AND b.id = ' 1 '
CREATE (a)-[:has_indication]->(b);

这会给零行影响而没有输出?

4

1 回答 1

4

这是因为您创建物品的方式,如果您查看您的“药房”代码,您将拥有:

CREATE ( p1:pharma { name: " Magnesium ", id: " 12 " } )

要与此匹配,您需要执行以下操作:

MATCH (a:pharma) 
WHERE a.id = ' 12 '
RETURN a

我在“12”周围添加了额外的空格以使其匹配。因此,您的查询将读取为:

MATCH (a:pharma),(b:ind)
WHERE a.id = ' 12 ' AND b.id = '1'
CREATE (a)-[:has_indication]->(b)

现在,这将使它工作 - 但可能值得稍微改变你的模型,如果id它总是一个整数,我会将你的创建更改为:

CREATE ( p1:pharma { name: "Magnesium", id: 12 } ) 
CREATE ( p2:pharma { name: "Hyoscine Butylbromide", id: 22 } ) 
CREATE ( p3:pharma { name: "Propantheline Bromide", id: 23 } );

并且在使用(or ) 字符时要格外小心,在您的原始创建中,您还为名称添加了额外的空格(这就是您的第二个查询不起作用的原因)"'

编辑

好的,这是一组完整的工作数据,我已经编辑了您的两个 create 语句来得到这个:

CREATE ( p1:pharma { name: 'Magnesium', id: 12 } ) 
CREATE ( p2:pharma { name: 'Hyoscine Butylbromide', id: 22 } ) 
CREATE ( p3:pharma { name: 'Propantheline Bromide', id: 23} )
CREATE ( i1:ind { id: 1, name: 'Dyspepsia',  pdfk: 12}) 
CREATE ( i2:ind { id: 5, name: 'Symptomic relief of intestinal disorder', pdfk: 22}) 
CREATE ( i3:ind { id: 6, name: 'Symptomic relief of disorder', pdfk: 22}) 
CREATE ( i4:ind { id: 7, name: 'Bowel colic', review: 'False', pdfk: 23})

基本上我已经删除了'字符并使用整数作为id(和pdfk)。MATCH为此:

MATCH (a:pharma),(b:ind)
WHERE a.id = 12 AND b.id = 1
CREATE (a)-[:has_ind]->(b)

并检查它是否有效(除了您收到的消息):

MATCH (p:pharma),(i:ind) RETURN p,i

你会看到一个链接到另一个。

于 2014-01-10T08:39:34.040 回答