Neo4j 构建地图不需要';不允许索引集合作为映射键?

Neo4j 构建地图不需要';不允许索引集合作为映射键?,neo4j,cypher,Neo4j,Cypher,所以我试图写一个对我来说很有趣的答案。见鬼,我要试一试 这是我想出的解决办法。在我看来,这似乎是正确的,应该会产生正确的结果,但会产生一个密码解析错误 所以这里的游戏是取两个集合(字母和数字),然后用它们构建一个映射图,从两个集合中依次将正确的字母映射到正确的数字 我的解决方案: with [1,2,3] as nums, ['a', 'b', 'c'] as letters with nums, letters, range(0, length(nums)-1) as idxs return

所以我试图写一个对我来说很有趣的答案。见鬼,我要试一试

这是我想出的解决办法。在我看来,这似乎是正确的,应该会产生正确的结果,但会产生一个密码解析错误

所以这里的游戏是取两个集合(字母和数字),然后用它们构建一个映射图,从两个集合中依次将正确的字母映射到正确的数字

我的解决方案:

with [1,2,3] as nums, ['a', 'b', 'c'] as letters
with nums, letters, range(0, length(nums)-1) as idxs
return extract(idx in idxs | { letters[idx] : nums[idx] });
我的理由是,我需要迭代集合索引,以便可以使用相同的索引同时“推进两个集合”。我使用
extract
获取每个索引,然后构建嵌套映射,该映射将适当的项配对

但它失败了,因为cypher说:

Invalid input '[': expected an identifier character, whitespace, '}' or ':' (line 3, column 39 (offset: 140))
"return extract(idx in idxs | { letters[idx] : nums[idx] });"
                                       ^
更新:cybersam回答了原始问题,并表示“可能无法动态创建地图密钥”。所以我真正的问题是——精确吗(地图不能有动态键),如果是,为什么

这只是cypher的“限制”。您可以尝试以下方法:

WITH 'a' as key, 'test' as value
RETURN {key: value}
但结果是:

{"key":"test"}
Cybersam的答案中显示了正确的方法。大概是这样的:

WITH 'a' as key, 'test' as value, 'b' as key2, 'test2' as value2
RETURN [{key: key, value: value}, {key: key2, value: value2}]
结果将是:

[{"key":"a","value":"test"},{"key":"b","value":"test2"}]

要创建动态映射键,必须使用java或其他编程语言。

为什么会这样?该设计是否具有禁止使用动态键的“功能”,以防止在允许使用动态键的情况下出现更严重的问题?还是疏忽?还是我遗漏了一些完全不同的考虑?我猜测/希望这里有一些有趣或深刻的原因,为什么显而易见的功能不是一个好主意。我承认这个变通办法是可行的,但它确实很难解决。(一个将键和值都存储为值的映射!它必须在编程词典中术语kludge的旁边)我同意你的评论。我认为这个问题的优先级很低,因为有一些解决方法:1)编程语言2)笨拙的语言;而且功能的实现可能会很复杂。我认为更高的优先级会提高性能、可伸缩性等()我想等待下一个答案和评论。