Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j添加json作为关系,输入无效';{';:_Json_Neo4j_Cypher_Py2neo - Fatal编程技术网

Neo4j添加json作为关系,输入无效';{';:

Neo4j添加json作为关系,输入无效';{';:,json,neo4j,cypher,py2neo,Json,Neo4j,Cypher,Py2neo,我正在使用py2neo-cypher加载节点之间的关系。我想使用json对象作为此关系,以便稍后查询。以下是我的cypher查询: MATCH (a:OntologyNode),(b:OntologyNode) WHERE a.cid = 'abcat1' AND b.cid = 'abcat2' CREATE (a)-[r:{'operand2': 'Product_Weight', 'operand1': 'Maximum_Weight', 'operator': '>=

我正在使用py2neo-cypher加载节点之间的关系。我想使用json对象作为此关系,以便稍后查询。以下是我的cypher查询:

 MATCH (a:OntologyNode),(b:OntologyNode) 
 WHERE a.cid = 'abcat1' 
 AND b.cid = 'abcat2' 
 CREATE (a)-[r:{'operand2': 'Product_Weight', 'operand1': 'Maximum_Weight', 'operator': '>='}]->(b)
这是我的错误:

 InvalidSyntax: Invalid input '{': expected whitespace or a rel type name (line 1, column 111 (offset: 110))

我觉得它不喜欢“{”,但是有没有办法解决这个问题呢?我喜欢将这个json作为关系的原因是能够查询它。

您可以将json的键/值对作为属性添加到关系中

MATCH (a:OntologyNode),(b:OntologyNode) 
WHERE a.cid = 'abcat1' 
AND b.cid = 'abcat2' 
CREATE (a)-[r:REL {operand2: 'Product_Weight', operand1: 'Maximum_Weight', operator: '>='}]->(b)
然后你可以这样查询它

MATCH (:OntologyNode)-[rel:REL]->(:OntologyNode) 
WHERE rel.operand2 = 'Product_Weight'
AND rel.operand1 = 'Maximum_Weight'
AND rel.operator = '>='
如果您真的想使用实际的JSON作为关系,那么可以像这样反勾选JSON字符串

MATCH (a:OntologyNode),(b:OntologyNode) 
WHERE a.cid = 'abcat1' 
AND b.cid = 'abcat2' 
CREATE (a)-[r:`{operand2: 'Product_Weight', operand1: 'Maximum_Weight', operator: '>='}`]->(b)
如果您想将两者结合起来,您可以始终将JSON存储在关系的另一个属性中

...
create (a)-[r:REL]->(b)
set r.operand2 = 'Product_Weight'
, r.operand1 = 'Maximum_Weight'
, r.operator = '>='
, r.json = "{operand2: 'Product_Weight', operand1: 'Maximum_Weight', operator: '>='}"

我不清楚“我想使用json对象作为此关系”是什么意思。Neo4j将关系定义为两个节点之间的存储连接,具有文本类型名称和可选的属性映射/字典

还请注意,JSON只是一个符号,而不是一个类型系统。此外,Cypher本身并不使用或生成JSON

Cypher使用的文字映射表示法类似于JSON,但与JSON不兼容。属性键通常不带引号,除非它们包含特殊字符(使用反勾号)。不支持双引号。属性键应视为标识符,而不是字符串

您还说“我之所以希望将此json作为关系,是因为能够查询它”。Cypher不包含json查询功能,尽管您当然可以查询关系的属性

...
create (a)-[r:REL]->(b)
set r.operand2 = 'Product_Weight'
, r.operand1 = 'Maximum_Weight'
, r.operator = '>='
, r.json = "{operand2: 'Product_Weight', operand1: 'Maximum_Weight', operator: '>='}"
如果您想要的是一个包含属性的关系,那么您需要为您的关系指定一个类型名称,并使用Cypher映射表示法而不是JSON表示法。类似于:

MATCH (a:OntologyNode),(b:OntologyNode) 
WHERE a.cid = 'abcat1' 
AND b.cid = 'abcat2' 
CREATE (a)-[r:RELATES_TO {operand2: 'Product_Weight', 
                          operand1: 'Maximum_Weight', operator: '>='}]->(b)

显然,用适合您的域的关系名称替换
关联到

我非常喜欢第一种方法。据我所知,您刚刚添加了“REL”但是,当我这样做的时候,我仍然得到了错误。是的,我添加了
REL
是关系类型。我还取消了json中的键的引号:操作数2、操作数1和运算符。删除键的引号的唯一问题是它不是有效的json。否则它会工作得很好。关于如何解决这个问题,有什么想法吗因为该示例中的JSON是Neo4j cypher解析器所期望的格式。它使用JSON,但实际上将键/值对存储为关系对象的属性。您可以始终将原始JSON添加为关系的附加属性。我更新了答案,将其作为另一个选项包含在内。当n使用py2neo和json文件读入。我可以看出的一个原因是它总是将键保留在引号中。使用set-then-json作为附加属性也会引发错误。