最近在学习cypher查询,如果return的结果是多个list值,该怎么对每个list进行处理呀,想实现的是对list内数据进行不同的位运算,利用unwind展开能否知道是原列表第几个值,或者有什么计数的方法吗
补充:1.利用unwind处理,请问如何将size(list)也加到最后的输出中,直接return会重复输出很多行
2.实现另一种case方法,按照计数对每个列表分段处理
neo4j cypher语句如何实现对返回的多个list数据分段处理
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
6条回答 默认 最新
关注引自强大而免费的微信小程序:皆我百晓生。
1. 如何处理返回的多个list数据
在Cypher查询中,可以使用
WITH子句对返回的多个list数据进行处理。WITH子句可以将前一个查询的结果作为输入,并将该结果传递给下一个查询。下面是一个示例查询,演示如何对返回的两个list数据进行处理:
MATCH (n:Node) RETURN collect(n.name) AS names, collect(n.age) AS ages在这个查询中,我们匹配了节点标签为
Node的节点,并返回了这些节点的名字和年龄作为两个不同的list。我们可以使用collect()函数来将节点属性的值收集到一个list中。接下来,我们可以使用
WITH子句来对这两个list进行处理和操作:MATCH (n:Node) WITH collect(n.name) AS names, collect(n.age) AS ages RETURN [name IN names | name + ' is ' + toString(ages[names.indexOf(name)])] AS result在上述查询中,我们使用
WITH子句将names和ages作为输入传递给下一个查询。然后,我们使用列表推导式([name IN names | ...])遍历names列表,并通过ages[names.indexOf(name)]获取对应的年龄值。最后,我们返回一个带有名字和年龄的字符串的新列表。2. 利用unwind展开以及计数方法
要实现对返回的list内数据进行不同的位运算,并获取原列表内每个值的位置信息,可以使用
UNWIND操作符将list展开为多个行。然后,可以使用内建函数range()来获得每个list的索引,并在查询中引入一个计数器。下面是一个示例查询,展示如何对返回的list内的数据进行位运算,并同时获取原列表内的位置信息:
MATCH (n:Node) RETURN collect(n.value) AS values在这个查询中,我们匹配了节点标签为
Node的节点,并返回了这些节点的值作为一个list。接下来,我们可以使用
UNWIND展开操作符和range()内建函数来处理这个list,并获取每个值的位置信息:MATCH (n:Node) WITH collect(n.value) AS values UNWIND range(0, size(values) - 1) AS index RETURN values[index] AND 2^index AS result在上述查询中,我们使用
WITH子句将values作为输入传递给下一个查询。然后,我们使用UNWIND展开操作符将values展开为多个行。通过range(0, size(values) - 1),我们可以获得一个从0到list的大小减1的数字范围。然后,我们使用AND位运算符和2^index来对每个值进行不同的位运算,并返回结果。通过
index可以得到每个值在原列表中的位置信息。在这个示例中,我们使用了AND位运算符和指数运算符对每个值进行位运算。你可以根据具体需求进行修改位运算的操作。希望以上解答对你有帮助!如果有任何进一步的问题,请随时提问。
评论 打赏 举报 编辑记录解决 2无用