Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 如何分组及;按带密码的不同标签排序_Neo4j_Cypher - Fatal编程技术网

Neo4j 如何分组及;按带密码的不同标签排序

Neo4j 如何分组及;按带密码的不同标签排序,neo4j,cypher,Neo4j,Cypher,刚从neo4j开始,我想我会用一个真实的模型来自学。陷入以下困境 模型 (d:目的地)-[:主机]->(a:住宿) :住宿与其他标签一起细分为:寄宿家庭/:酒店/:宾馆等。 查询 对于给定的d.name,要检索按子类型分组的所有a.name 非常感谢您的帮助这应该可以: MATCH (d:Destination)-[:Hosts]-(a:Accomodation) WHERE d.name = 'some name' RETURN DISTINCT labels(a), collect(a.na

刚从neo4j开始,我想我会用一个真实的模型来自学。陷入以下困境

模型
(d:目的地)-[:主机]->(a:住宿)

:住宿与其他标签一起细分为:寄宿家庭/:酒店/:宾馆等。

查询 对于给定的
d.name
,要检索按子类型分组的所有
a.name

非常感谢您的帮助

这应该可以:

MATCH (d:Destination)-[:Hosts]-(a:Accomodation)
WHERE d.name = 'some name'
RETURN DISTINCT labels(a), collect(a.name)

如果要查询子类型,可能更容易将其放入节点属性中。

要在Martin Preusse的解决方案上分层,可以在临时步骤中过滤出住宿标签并返回第0个元素。这假设至少有两个标签开始(即确实存在子分类)

匹配(d:目的地)-[:主机]->(a:住宿)
与d
A.
,过滤器(键入标签(a),其中键入“Accomodation”)[0]作为类型
返回d.name、type、collect(a.name)

谢谢@Martin。可能是知识太少在我这边变得很危险:)但我记得在某个地方读过-在标签上查询比在node.property上查询要快。因此,使用子类型的优点是,您可以仅返回
住宿的子类型。取决于您的查询,只是一个建议。谢谢Dave,我还注意到标签(a)可以被视为数组。如果保证标签总是按:supertype:subtype排序,那么查询可以简单地将子类型分组为标签(a)[1],这样也可以:
MATCH(d:Destination)-[:Hosts]-(a:accountation),其中d.name='some name'返回不同的标签(a)[1],collect(a.name)
我想我从来没有在任何地方见过为标签提供特定订单的情况。我认为在旧版本中,标签集合是按照您将它们添加到节点的顺序排序的。在2.3中,它们似乎是按字母顺序排列的。但是,任何地方都没有定义标签层次结构,因此必须推断按层次结构排序。我绝对不会相信这一点。如果您确实知道节点将具有特定数量的标签,尽管您可以解析集合中不需要的标签。
match (d:Destination)-[:HOSTS]->(a:Accomodation)
with d
, a
, filter(type in labels(a) where type <> 'Accomodation')[0] as type
return d.name, type, collect(a.name)