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

时间:2014-09-12 09:02:18

标签: neo4j cypher

好吧,我回到这里重新提出一个尚未解决的问题。我会尝试更好地解释它。

我收到了以下密码查询:

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],具体取决于数组的内容(在本例中为Node [1346] {language:“en-us”,text:“female”},因为“en-我们“是第一次出现在p列上有一个macth的数组。

再次感谢您的耐心等待。

保罗

1 个答案:

答案 0 :(得分:0)

也许有更聪明的方法可以解决这个问题,但至少这句话可以解决你的问题:

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
相关问题