如何在neo4jphp中实现label的自动增量id属性?

时间:2014-04-19 12:04:24

标签: php neo4j auto-increment neo4jphp

我必须创建架构,以便有属性" id"标签" City"。 我必须使" id"的自动增量值。在我创建标签类型" City"的每个节点上。我正在使用neo4j的PHP库:

我已经看到了这个任务Auto Increment in Neo4j,但它没有通过php或特定策略来实现。

2 个答案:

答案 0 :(得分:0)

您可以用Java(或其他JVM语言)编写unmanaged extension,使用TransactionEventHandler来管理计数器并将其部署到您的Neo4j服务器。

答案 1 :(得分:0)

这在技术上并不是你要求的(因为它不是自动增量或数字),因为neo4j没有自动增量......但这就是我解决的问题通过生成随机字符串作为ID

来解决同样的问题 如果你想要一个不同的默认长度,

更改$length$tries仅用于防止无限循环...(此函数尝试创建5长度的唯一ID 3次,然后尝试创造6个长身份等...

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代码,但我还没有对其进行测试。