Neo4j - 为什么所有节点的 uuid 都为空,但数据库一直在为它们编制索引并尝试在搜索期间使用它们?

Neo4j - Why uuid is null for all nodes but the database keeps indexing them and attempts to use them during searches?

这里简单描述一下问题:

irb(main):001:0> b = Bisac.first
 CYPHER 268ms MATCH (n:`Bisac`) RETURN n ORDER BY n.uuid LIMIT {limit_1} | {:limit_1=>1}
=> #<Bisac uuid: nil, bisac_code: "MUS037050", bisac_value: "MUSIC / Printed Music / Mixed Collections">

索引如下:

  ON :Author(uuid)              ONLINE (for uniqueness constraint) 
  ON :Author(author_name)       ONLINE (for uniqueness constraint) 
  ON :Bisac(uuid)               ONLINE (for uniqueness constraint) 
  ON :Bisac(bisac_code)         ONLINE (for uniqueness constraint) 
  ON :Country(country_name)     ONLINE (for uniqueness constraint) 
  ON :Country(uuid)             ONLINE (for uniqueness constraint) 
  ON :Description(uuid)         ONLINE (for uniqueness constraint) 
  ON :Language(iso_639_2_code)  ONLINE (for uniqueness constraint) 
  ON :Language(uuid)            ONLINE (for uniqueness constraint) 
  ON :Publisher(uuid)           ONLINE (for uniqueness constraint) 
  ON :Publisher(publisher_name) ONLINE (for uniqueness constraint) 
  ON :Region(region_name)       ONLINE (for uniqueness constraint) 
  ON :Region(uuid)              ONLINE (for uniqueness constraint) 
  ON :Woka(woka_title)          ONLINE                             
  ON :Woka(uuid)                ONLINE (for uniqueness constraint) 
  ON :Woka(woka_id)             ONLINE (for uniqueness constraint) 

能不能把这些uuid改成not null值,好像很有用? 所有数据均从 CSV 文件加载。 uuid 上的所有索引都是在 Rails 控制台上第一次从 Ruby 访问数据时创建的,语句如下:b = Bisac.first,或 a = Auhtor.first,等等。

由于 Neo4j ID 可以回收,ActiveNode 需要每个模型上的 属性 是唯一的。默认为 uuid,但您可以使用 id_property 方法自行选择。

如果您想填充该字段,这里有一个用于设置 uuid 的迁移工具:

https://github.com/neo4jrb/neo4j/wiki/Neo4j-v3-Migrations

但基本上字段是使用 Ruby 的 SecureRandom.uuid 设置的。您也可以使用自己的查询在数据库中自己执行此操作,或者如果您能够使用 LOAD CSV 重建数据库,则可以将其作为列添加到 CSV 文件中