【问题标题】:How to implement auto-increment id property of label in neo4jphp?如何在neo4jphp中实现标签的自增id属性?
【发布时间】:2014-04-19 12:04:24
【问题描述】:

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

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

【问题讨论】:

    标签: neo4jphp php neo4j auto-increment neo4jphp


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      从技术上讲,这不是您所要求的(因为它不是自动增量或数字),因为 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 代码替换了它,但我还没有测试过。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-25
        • 1970-01-01
        • 2011-02-11
        • 2016-04-30
        • 2010-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多