代码之家  ›  专栏  ›  技术社区  ›  Paolo Di Pietro

如何根据数组中的第一个匹配(和找到的节点)查询第一个节点?

  •  0
  • Paolo Di Pietro  · 技术社区  · 11 年前

    好吧,我回来是为了重新提出一个未回答的老问题。我会尽量解释得更好。

    我得到了以下密码查询:

    neo4j-sh$ start n=node(1344) match (n)-[t:_HAS_TRANSLATION]-(p) return t,p;
    +-----------------------------------------------------------------------------------+
    | t                                   | p                                           |
    +-----------------------------------------------------------------------------------+
    | :_HAS_TRANSLATION[2224]{of:"value"} | Node[1349]{language:"hi-hi",text:"(>0@"}    |
    | :_HAS_TRANSLATION[2223]{of:"value"} | Node[1348]{language:"es-es",text:"hembra"}  |
    | :_HAS_TRANSLATION[2222]{of:"value"} | Node[1347]{language:"ru-ru",text:"65=A:89"} |
    | :_HAS_TRANSLATION[2221]{of:"value"} | Node[1346]{language:"en-us",text:"female"}  |
    | :_HAS_TRANSLATION[2220]{of:"value"} | Node[1345]{language:"it-it",text:"femmina"} |
    +-----------------------------------------------------------------------------------+
    

    然后我有一个动态的语言数组(可以在任何查询中更改),按任何顺序排列,比如

    ["fr-fr","jp-jp","en-us", "it-it", "de-de", "ru-ru", "hi-hi"]
    

    我需要一个查询来根据数组的内容仅提取第一个[p](在本例中,节点[1346]{language:“en-us”,text:“female”},因为“en-us“是p列上第一个出现macth的数组。

    再次感谢您的耐心等待。

    保罗

    1 回复  |  直到 11 年前
        1
  •  0
  •   Stefan Armbruster    11 年前

    也许有更聪明的方法来解决这个问题,但至少这句话应该能解决你的问题:

    START n=node(1344) match (n)-[t:_HAS_TRANSLATION]-(p)
    WITH n, collect(p.language) as languages
    WITH n, filter(x in ["fr-fr","jp-jp","en-us","it-it","de-de","ru-ru","hi-hi"] where x in languages)[0] as lang
    MATCH (n)-[t:_HAS_TRANSLATION]-(p)
    WHERE p.language = lang
    RETURN t,p