neo4j-如何使用属性值设置标签
我有没有标签的节点,但有一个属性节点类型 有没有办法用NodeType属性的值设置这些节点的标签neo4j-如何使用属性值设置标签,neo4j,Neo4j,我有没有标签的节点,但有一个属性节点类型 有没有办法用NodeType属性的值设置这些节点的标签 谢谢 否,目前无法使用变量定义标签 您必须在应用程序中通过获取要在其上添加标签的所有节点并发送密码查询来添加此标签来完成此操作 PHP中的一个快速示例: $nodes = $client->sendCypherQuery('MATCH (n) WHERE n.nodeType = "MyType" RETURN n'); foreach ($nodes as $node) { $lab
谢谢 否,目前无法使用变量定义标签 您必须在应用程序中通过获取要在其上添加标签的所有节点并发送密码查询来添加此标签来完成此操作 PHP中的一个快速示例:
$nodes = $client->sendCypherQuery('MATCH (n) WHERE n.nodeType = "MyType" RETURN n');
foreach ($nodes as $node) {
$label = $node->getProperty('nodeType');
$id = $node->getId();
$client->sendCypherQuery('MATCH (n) WHERE id(n) = '.$id.' SET n :'.$label;
}
您不能使用变量,但仍然可以在密码查询(或至少其中一些)而不是脚本中使用。如果您只有少数几个不同的标签,那么这可能会很好地工作,但对于许多标签来说,伸缩性不是很好
MATCH (n)
WHERE length(labels(n)) = 0
AND n.type = 'XX'
SET n:XX;
MATCH (n)
WHERE length(labels(n)) = 0
AND n.type = 'XY'
SET n:XY;
黑客解决方案是使用类似以下内容的密码查询:
start n=node({nodeId})
set n :LABEL with n
return labels(n)
并在此查询上运行一些文本操作,以便插入标签。下面是一个java示例:
String setNodeLabelQuery = getQueryString();
setNodeLabelQuery = setNodeLabelQuery.replaceFirst("LABEL", "LABEL_B);
其中
getQueryString()
是一个返回查询字符串的方法。使用Cypher和APOC将属性值移动到标签
// create a node with property studio
create (n:Movies {name: 'A Few Good Men', studio: 'Warner Brothers'})
// move the 'studio' property to a label and remove it as a property
MATCH (n:Movies)
call apoc.create.addLabels([ id(n) ], [ n.studio ]) yield node
with node
remove node.studio
return node
回答得好。很高兴在Cypher中看到这样的调整。