我知道节点和关系具有标识它们的整数值。标签和/或属性是否一样?通过给出节点ID和字符串来标识节点标记是否足够?也就是说,是否可以多次将同一标签分配给同一节点/关系?
答案 0 :(得分:1)
所有节点和关系have IDs and can be looked up by their IDs。你可以这样做:
MATCH (n) WHERE id(n) = 5 RETURN n;
ID应被视为内部实现细节;不要依赖它们具有任何特定的价值或保持一致或有序,只需依靠它们来唯一地识别每个节点。
一般情况下,恕我直言,最好将自己有意义的标识符分配给可用于查找节点的节点(可能已编入索引),就像您将主键分配给关系数据库记录一样。
可以为多个节点分配标签;标签应该更多地被视为节点类,有点像ERD中的实体。通常标签可以是人物,公司,工作等。标签虽然与标识符没有多大关系。
答案 1 :(得分:1)
标签和属性在Neo4j中是否具有id值?
否
通过给出节点ID和字符串来识别节点标签是否足够?
如果你这意味着你在String变量中有节点id和标签值,那么是,它是。仅使用ID也足够了。
MATCH (n) WHERE ID(n) = 1234 RETURN n
更好:
MATCH (n:YourLabel) WHERE ID(n) = 1234 RETURN n
由于FrobberOfBits暗示,最好忽略(无理由)Neo在外部交互中附加到节点/关系的内部ID。这部分与Neo回收它的内部标识符有关(因此,如果您创建一个节点,它被分配ID 1,删除该节点,下一个创建的节点可以被分配ID 1) ,以及与暴露系统内部有关的部分内容。相反,您应该在需要时添加有意义的标识符或UUIDS。
使用您自己的标识符:
MATCH (n:YourLabel{uid:1234}) RETURN n
要快速查找,请将它们编入索引:
CREATE INDEX ON :YourLabel(uid)
是否可以多次为同一个节点/关系分配相同的标签?
节点可以包含您想要分配的标签(包括无),这在您想要维护Node"类型"的层次结构时非常方便。拥有一个标签可以让他们更快地查找,因为Neo有一个从哪里开始的提示。
关系只能有一种类型,而且该类型是不可变的。即如果要从类型HAS_A
更改为HAD_A
,您不能只更改类型,您必须删除并重新添加关系。
使用相同的关系类型或不同的关系类型,节点可以根据需要多次与另一个节点相关联。在性能方面,最好使用不同的关系类型,而不是在关系上使用属性,因为查找速度更快。
CREATE (p:Person{name:"Dave"}), (m:Pet), (d:Pet),
(p)-[:HAS_PET{type:"Cat"}]->(m),
(p)-[:HAS_PET{type:"Dog"}]->(d)
很好,原样:
REATE (p:Person{name:"Dave"}), (m:Pet), (d:Pet),
(p)-[:HAS_CAT]->(m),
(p)-[:HAS_DOG]->(d)
如果您想进行匹配所有狗的查询,现在哪个更快。如果Dave的狗被重新分配你就不能这样做:
MATCH (p:Person{name:"Dave"})-[rel:HAS_DOG]->()
SET rel:HAS_CAT
但你可以这样做:
MATCH (p:Person{name:"Dave"})<-[rel:HAS_PET{type:"Dog"}]-()
SET rel.type = "Cat"
但我可能错过了多项任务的问题。
答案 2 :(得分:1)
不确定你的目标是什么:
是的,属性名称,重新类型和标签都有内部ID,它们不会存储为字符串
您可以通过标签+属性+值来识别节点,如果您有唯一性约束,则可以识别一个