使用py2neo(Neo4j)自动增加属性?

Posted

技术标签:

【中文标题】使用py2neo(Neo4j)自动增加属性?【英文标题】:Auto increment property with py2neo (Neo4j)? 【发布时间】:2015-06-12 01:17:33 【问题描述】:

我正在使用带有 py2neo 的烧瓶作为我的 Rest 服务,我有一个标签为“用户”的用户节点。

如何在 neo4j 中使用 py2neo 自动增加“用户”标签的 id?

【问题讨论】:

【参考方案1】:

你没有,你可能不应该。 Neo4j 已经提供了一个内部 id 字段,它是一个自动递增的整数。它不是节点的属性,但可以通过 id() 函数访问,如下所示:

MATCH (n:Person)
RETURN id(n);

因此,每当您创建任何节点时,neo4j 都会免费自动完成,而 py2neo 不会这样做。

如果您的代码需要不同类型的标识符,我建议您使用一些看似全球唯一的标识符,例如 UUID,这在 python 中很容易实现,而不是自动递增整数。

将自动递增的数字作为 ID 的问题在于,由于它们有一个模式(自动递增),人们开始依赖标识符的值,或者开始依赖对如何分配 ID 的期望.这在数据库中几乎总是一个坏主意。标识符的唯一目的是与其他所有内容不同。它没有任何意义,在某些情况下甚至不能保证不会改变。避免将任何对任何特定值或分配方案的依赖嵌入到您的代码中。

这就是我喜欢 UUID 的原因,因为它们的分配方案本质上是任意的,而且它们显然没有任何意义——所以它们不会诱使设计师对它们做任何聪明的事情。 :)

【讨论】:

我能否澄清一下:我在网上其他地方读到过,我们不应该依赖 Neo4j 为节点保留的内部 ID,而应该使用我们自己的 ID,但是你在这里提到我们不应该使用我们自己的 id。谢谢! @Lamoni 这个答案并不是说你不应该使用自己的身份证。使用您自己的 ID 是个好主意。在该 ID 中嵌入含义是一个坏主意。 (因此没有意义的 UUID 都是唯一的) 啊谢谢你的澄清,我误会了。谢谢!

以上是关于使用py2neo(Neo4j)自动增加属性?的主要内容,如果未能解决你的问题,请参考以下文章

知识图谱Py2neo操作Neo4j使用教程

Py2neo成功连接Neo4j初探:Movie Graph

如何使用py2neo v4和Neo4j合并节点和关系

neo4j & py2neo使用过程中踩过的坑

py2neo+Neo4j初体验

知识图谱Python.py2neo操作Neo4j