【问题标题】:Deriving the label names from other node in neo4j从 neo4j 中的其他节点派生标签名称
【发布时间】:2014-09-17 07:30:38
【问题描述】:

我使用的是 ne04j 2.1.2 社区版。

我有一个标签名为Company 的节点,我通过加载 CSV 文件以及 MERGE 和 CREATE 命令来创建这些节点和标签。 因此,如果将来我的标签名称发生变化,例如 CompanyOrganization,我想在某处维护 createddate、UpdatedDate、NewLabelName、OldLabelName 值。

因此,为了实现这一点,我想到了维护一个保存标签信息的主节点,即它应该具有 NewLabelName、OldLabelName、CreatedDate、UpdatedDate 等属性。所以标签名称应该从主节点到其他节点。每当我们对标签进行任何更改时,相应的UpdatedDate 属性值应该在主节点中更新,并且NewLabelName 应该从主节点到其他节点(该标签所属的节点)。

希望你理解这里的场景。

但我怎样才能做到这一点?有可能实现吗?如果是,那么我该如何定义主节点和其他节点之间的关系? (这里我的其他节点是 Google、Yahoo、Samsung 等公司的名称,这些节点将有一些其他子节点,例如 location)

请提出解决方案。 (我想使用 cypher 不使用 java 来实现这些)

谢谢

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    虽然可以更改标签,但您应该很少这样做(例如,从错误中恢复)。更改大量标签非常代价高昂,绝不应作为正常处理的一部分进行。

    此外,与 Java 类名称一样,标签名称通常不会显示给最终用户。所以,真的没有理由改变它们。尝试选择合理的标签名称开始,不要打算更改它们。

    【讨论】:

    • 是的,我知道不要频繁更改标签名称,或者在开始时我需要选择合理的名称。但我的要求是将来标签名称可能会改变。所以我想让这个改变只发生在定义了标签的主节点上,并且想在主节点中维护其他属性。如果我在那里更改标签,它应该反映在下面的后续节点中。我该怎么做?
    • 您只能在单个“主”节点中拥有标签和公共属性值,该节点与所有其他节点(即“共享”该标签和共同的属性值)。这样,更改标签或共享属性值只需在主节点中完成。唯一的缺点是查询会更长——比如MATCH (m:myLabel)-[:CHILD]->(n {name:"Fred"}) 而不是MATCH (n:myLabel {name:"Fred"})。但是,由于只有 1 个节点标记为 myLabel,因此效果应该可以忽略不计。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 2017-02-15
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    相关资源
    最近更新 更多