簡體   English   中英

如何在neo4jphp中實現標簽的自動遞增id屬性?

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

我必須創建模式,以使標簽“城市”具有屬性“ id”。 我必須在我創建的標簽類型為“城市”的每個節點上使“ id”的自動遞增值。 我正在使用neo4j的PHP庫:

我已經在Neo4j中看到了此任務Auto Increment,但是它沒有通過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代碼替換了它,但是我尚未對其進行測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM