我正在讨论这个YouTube tutorial,“在真实世界中使用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])
我对一个小点感到困惑 - 是什么让这个日期信息更像是一个'Property'而不是Label?
这可以建模而不是节点将此信息封装为标签而不是属性吗?在什么时候你需要其中一个而不是另一个?
答案 0 :(得分:4)
标签和属性是完全不同的东西。
property
属于某个节点或关系,并且具有名称和值。
节点label
在概念上类似于"类名",并且没有价值。
因此,谈论将日期值放在"标签"中没有任何意义。您只能在属性中放置一个值。
但请注意,人们经常使用标签名称(例如," Foo")作为具有Foo
标签"的节点的简写。例如,他们可能会说"将日期存储在Foo"当它们实际意味着"将日期存储在具有标签Foo"的节点的适当属性中。也许这就是造成混乱的原因。
答案 1 :(得分:1)
正如cybersam在他的回答中指出的那样,标签不能包含价值观。它们只是......标签。像标签一样。采取稍微不同的方向:
很久很久以前,在很远很远的版本中,Neo4j没有标签。因此,如果您想识别特定类型的节点(例如...... Person
)......您可能会包含属性+值,例如nodeType = 'Person'
。然后,您将在查询中包含一个过滤器,例如:
WHERE node.nodeType = 'Person'
标签使这种属性类型过时,并且也是可索引的。此外,您可能在节点上有多个标签(这将要求您的遗留nodeType
属性为数组,而不是搜索效率高。
所以:用于标记/索引的标签。保留值的属性。