neo4j 令人困惑的新模型“unique=True”行为

agxfikkp  于 2023-10-18  发布在  其他
关注(0)|答案(2)|浏览(115)

neomodel.StructuredNode上的unique属性的行为对我来说有点混乱。
有人能告诉我这是解释的文档吗?或者让我知道我误解了什么?
型号:

class Person(neomodel.StructuredNode):

    uuid = neomodel.UniqueIdProperty()

    legacy_external_id = neomodel.StringProperty(unique=True, required=False)

并不是所有的Person示例都有这个“legacy_external_id”,但是在它存在的地方,它需要是唯一的。
上面的代码在我看来符合这个描述。
但实际上,输出是:

In[]: p = Person(legacy_external_id='u12345')
In[]: p.save()
Out[]: < Person: {'uuid': '7d7e5c2224d647e9a87d23b9cb1c4153', 'legacy_external_id': 'u12345'} >

In[]: p = Person(legacy_external_id='u12345')
In[]: p.save()
Out[]: < Person: {'uuid': 'ed7690f8f28b4cf288c35d2130a2e6e4', 'legacy_external_id': 'u12345'} >

In[]: p = Person(legacy_external_id='u12345')
In[]: p.save()
Out[]: < Person: {'uuid': '7393a4b5022d40d8aca002cecac9b124', 'legacy_external_id': 'u12345'} >

只是不断增殖的节点(没有错误或警告)并不是我所期望的行为。
我很好自己写验证,但在我开始之前,我有兴趣了解我的误解。
任何建议都是赞赏的,谢谢!

koaltpgm

koaltpgm1#

首先,它应该是unique_index=True,而不是unique=True
此外,当前版本的Neomodel不支持unique_index=Truerequired=False的组合。如果一个属性被设置为unique,那么它也会自动被视为必需的(可能是因为否则,你可能有两个或更多的节点具有null属性,这将不是唯一的)。

djmepvbi

djmepvbi2#

我也遇到了同样的问题,这是由于没有安装索引和约束指令造成的,如下所述:https://neomodel.readthedocs.io/en/latest/configuration.html#enable-automatic-index-and-constraint-creation

from neomodel import install_labels
install_labels(Person)

相关问题