【问题标题】:Neo4j - query issue for same label and one property the sameNeo4j - 相同标签和一个属性相同的查询问题
【发布时间】:2014-06-16 06:57:07
【问题描述】:

我在查询具有一个相似属性、一个不同属性且具有相同标签的两个节点时遇到问题。对于一个属性,两个节点之间的属性相同,即两者都有一个名为 "Name" 的属性并且都具有相同的值 ("Data Storage")。对于另一个名为"Note" 的属性,它们具有不同的值。两者共享名为"Issue" 的相同标签。当我使用下面的查询时,我得到了两个节点。

match (n:Issue) where n.name="Data Storage" return n;

但是,当我使用以下查询进行查询时...

match (n:Issue) where n.name="Data Storage" and n.note="xxxx" return n;

...它仅适用于其中一个节点,不适用于另一个。我试过创建不查询的节点,它似乎工作正常。但我也使用了不同的标签。这是无法查询具有相同标签并共享至少一个公共属性的节点的一些错误吗?

【问题讨论】:

  • 新版?是升级后的店铺吗?
  • 请注意,属性名称区分大小写,您最初声明属性名为“名称”和“注释”,但在查询中您使用小写的属性名称?

标签: neo4j nodes labels


【解决方案1】:
match (n:Issue) where n.name="Data Storage" and n.note="xxxx" return n;

将匹配所有带有标签 Issue 的节点,“name”属性的值 = “Data Storage” AND “note”属性的值 = “xxxx”。

正如您描述的 2 个节点,note 属性的值在每个节点上都不同。匹配的 xxxx 是唯一可以返回的。 这个查询的目标是什么?

【讨论】:

    【解决方案2】:

    如果这是你真正的问题。

    查询具有相同标签并至少共享一个公共属性的节点?

    您可以为每个属性尝试此操作,然后对所有属性进行联合

    MATCH (n:Issue)
    WITH n.name, collect(n) as nodes, count(*) as cnt
    WHERE cnt > 1
    RETURN nodes
    

    否则性能会降低

    MATCH (n:Issue)
    WITH n
    MATCH (m:Issue)
    WHERE m<>n AND (n.name = m.name OR n.note = m.note)
    RETURN n,m
    

    【讨论】:

      猜你喜欢
      • 2015-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-08
      • 1970-01-01
      • 2013-08-27
      相关资源
      最近更新 更多