在Neo4j中何时使用特性而不是标签?
我正在复习这篇文章,“在现实世界中使用LOAD CSV” 本教程展示了如何获取CSV,其中每一行都是针对某家银行的投诉,并将其建模为Neo4j字典 执行此操作时,讲述人在投诉节点上设置属性:在Neo4j中何时使用特性而不是标签?,neo4j,cypher,Neo4j,Cypher,我正在复习这篇文章,“在现实世界中使用LOAD CSV” 本教程展示了如何获取CSV,其中每一行都是针对某家银行的投诉,并将其建模为Neo4j字典 执行此操作时,讲述人在投诉节点上设置属性: CREATE (complaint:Complaint {id: line.`Complaint ID`}) SET complaint.year= TOINT(date[2]), complaint.month= TOINT(date[0]), complaint.day = TOIN
CREATE (complaint:Complaint {id: line.`Complaint ID`})
SET complaint.year= TOINT(date[2]),
complaint.month= TOINT(date[0]),
complaint.day = TOINT(date[1])
我对一个小问题感到困惑——是什么让这个日期信息更像是一个“属性”而不是一个标签
如果节点将此信息封装为标签而不是属性,是否可以对此进行建模?什么时候你需要其中一个而不是另一个 标签和属性是完全不同的东西
属性属于节点或关系,具有名称和值
节点标签
在概念上类似于“类名”,没有任何值
因此,谈论在“标签”中添加日期值没有任何意义。只能在属性中输入值
但是,请注意,人们通常使用标签名(例如,“Foo”)作为“具有Foo
标签的节点”的缩写。例如,他们可能会说“将日期存储在Foo中”,而实际上他们的意思是“将日期存储在具有Foo标签的节点的适当属性中”。也许这就是造成混淆的原因。标签和属性是非常不同的东西
属性属于节点或关系,具有名称和值
节点标签
在概念上类似于“类名”,没有任何值
因此,谈论在“标签”中添加日期值没有任何意义。只能在属性中输入值
但是,请注意,人们通常使用标签名(例如,“Foo”)作为“具有Foo
标签的节点”的缩写。例如,他们可能会说“将日期存储在Foo中”,而实际上他们的意思是“将日期存储在具有Foo标签的节点的适当属性中”。也许这就是造成混淆的原因。正如塞伯萨姆在回答中指出的那样,标签不能包含值。他们只是。。。标签。就像一个标签。从一个稍微不同的方向来看:
很久很久以前,在一个遥远的版本中,Neo4j没有标签。因此,如果您想识别特定类型的节点(例如,…一个人
)。。。您可能会包含一个属性+值,例如nodeType='Person'
。然后在查询中包含一个过滤器,例如:
其中node.nodeType='Person'
标签使此类属性类型过时,并且还可以索引。此外,一个节点上可能有多个标签(这要求传统的nodeType
属性是一个数组,搜索效率不高)
So:用于标记/索引的标签。用于保存值的属性。正如cybersam在回答中指出的那样,标签不能包含值。他们只是。。。标签。就像一个标签。从一个稍微不同的方向来看:
很久很久以前,在一个遥远的版本中,Neo4j没有标签。因此,如果您想识别特定类型的节点(例如,…一个人
)。。。您可能会包含一个属性+值,例如nodeType='Person'
。然后在查询中包含一个过滤器,例如:
其中node.nodeType='Person'
标签使此类属性类型过时,并且还可以索引。此外,一个节点上可能有多个标签(这要求传统的nodeType
属性是一个数组,搜索效率不高)
So:用于标记/索引的标签。用于保存值的属性。在这个注释上-我只想添加一个属性,当我需要存储关于节点的数据时,我使用一个属性。当我基本上有一个枚举类别,我希望为其建立索引以进行快速查询时,我会在上使用标签。如果它不是枚举(固定/少量选项),则它不是标签。如果你不需要索引,它不是一个标签。默认选择应该是property,在需要这两个特定的东西时选择label。标签允许您按所选的枚举对图形进行分区。在这个注释上,我只想添加一个属性,当我需要存储关于节点的数据时,我会使用它。当我基本上有一个枚举类别,我希望为其建立索引以进行快速查询时,我会在上使用标签。如果它不是枚举(固定/少量选项),则它不是标签。如果你不需要索引,它不是一个标签。默认选择应该是property,在需要这两个特定的东西时选择label。标签允许您按所选枚举对图形进行分区。