Cypher / Neo4J中的集合是什么?

6

我不太明白Cypher中collections和其他类型输出的区别。可以有人向我解释一下吗?

例如下面这个查询:

match (c:Context) where c.name="health" or c.name="opinion" return collect(c);

返回1行,而查询

match (c:Context) where c.name="health" or c.name="opinion" return c;

返回6行(我的数据库中有6个与条件匹配的节点)。

这似乎是唯一的差别。

那么,这只是关于数据表示方式吗?还是使用集合有某种优势?

谢谢您的帮助!


Collect是一种聚合函数,因此它会聚合值,但不是通过计数或求和,而是通过将它们收集到每个分组键的列表中来实现。 - Michael Hunger
1个回答

7

集合将实体返回为数组,而不是每个结果都返回单独的“行”。 这样做的好处是,例如:我想获取与联系人关联的所有地址。

 Match (c:Contact)-[:AddressRelation]->(a:Address)
 return c,collect(a)

这将为每个联系人返回一组地址,而没有 collect,则会返回重复的联系人项目(每个地址一个)。
使用 collect 返回类似于以下内容:
row = { name:"fred" } , [{address1},{address2},...]
没有 collect:
row = { name:"fred"} , {address1}
row = { name:"fred"} , {address2}
...等等。
还有很多其他事情可以做,比如在数组中返回属性,在 foreach 循环中循环遍历每个节点等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接