如何在neo4jphp中实现标签的自动递增id属性


How to implement auto-increment id property of label in neo4jphp?

我必须创建模式,这样标签"City"就会有属性"id"。我必须在我创建的标签类型为"City"的每个节点上自动增加值"id"。我正在使用neo4j的PHP库:neo4jphp

我在Neo4j中看到了这个任务"自动增量",但php或特定策略并没有给出它的方式。

您可以用Java(或其他JVM语言)编写一个非托管扩展,该扩展使用TransactionEventHandler来管理计数器,并将其部署到Neo4j服务器。

从技术上讲,这不是你所要求的(因为它不是自动增量或数字),因为neo4j没有自动增量。。。但这就是我通过生成一个随机字符串作为ID 来解决相同问题的方法

更改$length如果你想要不同的默认长度,$tries只是用来防止无限循环。。。(此功能尝试创建5个长度的唯一ID 3次,然后尝试创建6个长度的ID等…

function makeNewID($client, $length = 5, $trys = 0)
   {
      //chars to pick from
      $charlist = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
      $strlen = strlen($charlist)-1;
      //alpha numeric generated in this for statement
      for ($newID = '', $i = 0; $i < $length; $newID .= $charlist[mt_rand(0, $strlen)], ++$i);
      //query the database to see if the 'new id exists'
      $query = new Everyman'Neo4j'Cypher'Query($client, 'MATCH (n{id:"'.$newID.'"}) RETURN n.id LIMIT 1');
      $result = $query->getResultSet();
      if(!empty($result[0]['x']->getProperty('id')))
      {
        $trys++;
        if($trys >= 3){$length++; $trys = 0;}
        $newID = makeNewID($Neo, $length, $trys);
      }
      return $newID;
   }

PS。我删除了代码中的抽象层,并将其替换为实际的neo4jphp-lib代码,但我还没有测试它