我收到了以下密码查询:
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"} |
+-----------------------------------------------------------------------------------+
和以下数组: [“it-it”,“en-us”,“fr-fr”,“de-de”,“ru-ru”,“hi-hi”]
如何更改查询以仅返回一个结果,其中'language'与第一次出现的数组相同?
如果阵列应该是 [“fr-fr”,“jp-jp”,“en-us”,“it-it”,“de-de”,“ru-ru”,“hi-hi”]
我需要返回Node [1346],因为它是第一个在语言数组[en-us]中匹配的,没有[fr-fr]和[jp-jp]的条目
谢谢
保
答案 0 :(得分:1)
Cypher可以表达数组,并为其编制索引。所以在一个层面上,你可以这样做:
start n=node(1344)
match (n)-[t:_HAS_TRANSLATION]-(p)
where p.language = ["it-it", "en-us", "fr-fr", "de-de", "ru-ru", "hi-hi"][0] return t,p;
这与请求p.language =" it-it" (数组中的第一个元素)。
现在,如果你的意思是language
属性本身可以是一个数组,那就把它当成一个:
$ create (p { language: ['it-it', 'en-us']});
+-------------------+
| No data returned. |
+-------------------+
Nodes created: 1
Properties set: 1
$ match (p) where p.language[0] = 'it-it' return p;
+-------------------------------------+
| p |
+-------------------------------------+
| Node[1]{language:["it-it","en-us"]} |
+-------------------------------------+
1 row
38 ms
请注意p.language[0]
上的数组括号。
最后,如果您正在谈论的是将您的语言部分分成几部分(即" en-us" = [" en","我们&# 34;])然后cypher的字符串处理功能有点偏弱,我不会尝试这样做。相反,我首先在将其插入图表之前对其进行预处理,然后将它们作为单独的部分进行查询。