neo4j - 如何使用属性值设置标签

时间:2014-10-23 20:11:58

标签: neo4j

我的节点没有标签但属性NodeType

有没有办法用NodeType属性的值设置那些节点的标签?

谢谢!

4 个答案:

答案 0 :(得分:4)

不,目前没有可能用变量定义标签。

您必须在应用程序中执行此操作,方法是获取要在其上添加标签的所有节点,然后发送Cypher Query以添加此标签。

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;
}

答案 1 :(得分:3)

您不能使用变量,但您仍然可以在密码查询(或至少其中一些)而不是脚本中执行此操作。如果您只有少量不同的标签,这可能效果很好,但对于许多标签而言不是那么可扩展。

  

例如

     
      
  1. MATCH(n)WHERE length(labels(n))= 0和n.type ='XX'SET n:XX;
  2.   
  3. MATCH(n)WHERE长度(标签(n))= 0和n.type ='XY'SET n:XY;
  4.   

答案 2 :(得分:0)

黑客解决方案是让Cypher查询看起来像:

start n=node({nodeId})
set n :LABEL with n
return labels(n)

对此查询运行一些文本操作,以便插入标签。这是一个java示例:

String setNodeLabelQuery = getQueryString();
setNodeLabelQuery = setNodeLabelQuery.replaceFirst("LABEL", "LABEL_B);

其中getQueryString()是返回查询字符串的方法。

答案 3 :(得分:0)

使用Cypher和AP​​OC将属性值移动到标签上

// 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

From