在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

我正在复习这篇文章,“在现实世界中使用LOAD CSV”

本教程展示了如何获取CSV,其中每一行都是针对某家银行的投诉,并将其建模为Neo4j字典

执行此操作时,讲述人在投诉节点上设置属性:

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。标签允许您按所选枚举对图形进行分区。