【问题标题】:Collection? Dictionary? List?收藏?字典?列表?
【发布时间】:2017-11-13 16:10:26
【问题描述】:

Neo4j 的手册很好地解释了节点、关系、标签和其他一些术语的含义。

不过,Cypher 的真实词汇似乎也包含不少难以捉摸的术语。

例如,手册的第 3.3.15.1 条说“列表和路径是 Cypher 中的关键概念”。很好,但是 Cypher 中的列表是什么?我几乎放弃了尝试找到那个“关键概念”的定义。

同样,Cypher 参考卡提到“Cypher 还支持地图和集合”。在其他地方,人们会发现 Cypher 也“与字典一起工作”。

不用说,我不知道如何在 Cypher 中发现和/或使用它们。

非常感谢一些插图。

谢谢。

【问题讨论】:

  • 请为您认为有用的答案投票。此外,如果其中一些对您的问题提供了令人满意的答案,请将最佳答案标记为已接受。

标签: neo4j cypher


【解决方案1】:

文档中有一个关于Composite types 的部分:

3.2.1.3。复合类型

  • ✓ 可以从 Cypher 查询返回
  • ✓ 可以作为参数使用
  • ❏ 不能存储为属性
  • ✓ 可以用 Cypher 字面量构造

复合类型包括:

  • 列表是异类、有序的值集合,每个值都有任何属性、结构或复合类型。
  • 映射是(键、值)对的异构、无序集合,其中:

    • 键是字符串
    • 值具有任何属性、结构或复合类型

您可能还对 openCypher 的开发感兴趣。 openCypher project 的目标之一是定义 Cypher 语言的概念。如其主页所述:

openCypher 项目旨在提供业界最广泛采用的图形数据库查询语言 Cypher 的完整开放规范。

目前,openCypher 正在进行中。它有一个draft document on the Property Graph Model,它本身并没有详细讨论列表/地图,而是引用了CIP2015-06-16 - Public Type System and Type Annotations 文档,这是一个公认的Cypher Improvement Proposal。它有一个关于“容器类型”的部分,它定义了列表和映射在 Cypher 中的工作方式。

我没有在核心 Neo4j 文档中看到“字典”一词。不过,可以在驱动程序周围提及它,因为某些语言,例如Python,使用这个术语来表示地图。

(免责声明:我是openCypher Implementers Group 会议的常客。)

【讨论】:

  • 我在 Julian M. Kunkel 的论文 Graph Processing with Neo4j 中偶然发现了“字典”。不在核心文档中,这正是我对 Neo4j 文档的问题!
  • 如果你在 Neo4j 文档中search for "dictionary",它只发生在客户端驱动程序和“字典顺序”(又名lexicographical order)的上下文中。因此,核心文档在谈论 Cypher 时从不使用 dictionary 代替 map
  • Graph Processing with Neo4j 讲座没有使用这个官方术语来表示地图——但是,这不会造成严重的歧义,因为字典是地图的众所周知的同义词。
  • 讲座甚至以免责声明开始:“大数据软件不断更新,代码示例可能已经过时”。概念也是如此:很多概念有多个名称,而有些名称可能指代多个概念。举个例子,CQL 通常指的是 Cassandra 查询语言,不推荐用于 Cypher。一般来说,具有多个定义的概念不仅在大数据应用中很常见,在计算机科学中也很常见。
【解决方案2】:

根据维基百科:

在 Cypher 中:

  • 这是一个列表RETURN ['Benoit', 'Simard'] AS list
  • 这是一张地图RETURN { firstname:'Benoit', lastname:'Simard'} AS map

干杯

【讨论】:

  • 谢谢。您能否提供一些专门在 Cypher 中针对这些类型的基本原理/用例?
  • 还有,列表和地图是集合吗?
猜你喜欢
  • 1970-01-01
  • 2023-04-09
  • 2018-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多