泰安肥城网站建设,昆明手机网站建设,网络技术服务公司,wordpress网站标题优化深解Cypher中的聚合 值或计数的聚合要么从查询返回#xff0c;要么用作多步查询下一部分的输入。查看数据模型 CALL db.schema.visualization() 查看图中节点的属性类型 CALL db.schema.notetypeproperties() 查看图中关系的属性类型 CALL db.schema.reltypeproperties() C…深解Cypher中的聚合 值或计数的聚合要么从查询返回要么用作多步查询下一部分的输入。查看数据模型 CALL db.schema.visualization() 查看图中节点的属性类型 CALL db.schema.notetypeproperties() 查看图中关系的属性类型 CALL db.schema.reltypeproperties() Cypher中的聚合 列表 列表是包含元素的数组。列表中的元素不必都是同一类型。使用 [ ] MATCH (m:Movie) RETURN [m.title, m.released, date().year - date(m.released).year 1 ]使用 collect() MATCH (a:Actor)--(m:Movie) WITH a,collect(m.title) AS Movies RETURN a.name AS Actor,Movies LIMIT 10工作原理 返回一个元素列表。可以 collect() 在查询期间随时使用创建列表。在查询期间创建列表时会发生聚合。在聚合期间图形引擎通常根据行中的某个值对数据进行分组。非聚合值是分组键Examples 多个MATCH PROFIL EMATCH (m:Movie {title:Jupiter Ascending}) MATCH (d:Person)-[:DIRECTED]-(m) MATCH (a:Person)-[:ACTED_IN]-(m) RETURN m.title AS Title, collect(DISTINCT a.name) AS Actors,collect(DISTINCT d.name) AS Directors 优化 PROFILE MATCH (m:Movie {title:Jupiter Ascending}) MATCH (d:Person)-[:DIRECTED]-(m) WITH m, collect (d.name) AS Directors MATCH (a:Person)-[:ACTED_IN]-(m) RETURN m.title AS Title, collect(a.name) AS Actors, Directors类似传统SQL将每部分添加查询条件得到最终结果单个MATCH PROFILE MATCH (d:Person)-[:DIRECTED]-(m:Movie {title:Jupiter Ascending})-[:ACTED_IN]-(a:Person) RETURN m.title AS Title, collect(DISTINCT a.name) AS Actors,collect(DISTINCT d.name) AS Directors收集节点 MATCH (m:Movie) UNWIND m.languages AS language WITH language, collect(m) AS movies MERGE (l:Language {name:language}) WITH l, movies UNWIND movies AS m WITH l,mMERGE (l)-[:SPEAKS]-(m)以作为 language 分组键收集节点使用 nodes() 返回路径中的节点列表。 MATCH path (p:Person {name: Elvis Presley})-[*4]-(a:Actor) WITH nodes(path) AS n UNWIND n AS x WITH x WHERE x:Movie RETURN DISTINCT x.title收集关系 MATCH (u:User {name: Misty Williams})-[x]-() WITH collect(x) AS ratings UNWIND ratings AS r WITH r WHERE r.rating 1 RETURN r.rating AS Rating, endNode(r).title AS Title使用 endNode() 返回关系末尾的节点。与子查询 PROFILE MATCH (m:Movie)-[:ACTED_IN]-(p:Person) WITH m, collect(p.name) AS Actors WHERE size(Actors) 3 RETURN m.title AS Movie, Actors查询重写 PROFILE CALL { MATCH (m:Movie)-[:ACTED_IN]-(p:Person) WITH m , collect(p.name) as Actors WHERE size(Actors) 3 RETURN m.title as Movie, Actors } RETURN Movie, Actors使用 count() 可以在查询处理期间对属性、节点、关系、路径或行进行计数。 MATCH (a:Person)-[:ACTED_IN]-(m:Movie)-[:DIRECTED]-(d:Person) RETURN a.name AS ActorName,d.name AS DirectorName,count(*) AS NumMovies, collect(m.title) AS Movies ORDER BY NumMovies DESC在属性值上使用 MATCH (p:Person) RETURN count(p) , count(p.born)count(p.name) 此查询看到 born 的计数与其它不同说明节点中无 born 属性作为过滤查询的子句 MATCH (a:Person)-[:ACTED_IN]-(m:Movie) WITH a, count(*) AS NumMovies, collect(m.title) AS Movies WHERE NumMovies 2 RETURN a.name AS Actor,Movies计算节点数 MATCH (p:Person {name: Elvis Presley})-[]-(m:Movie)-[]-(a:Actor) RETURN count(*), count(m), count (a)使用模式理解 模式理解的行为类似于使用 OPTIONAL MATCH并且对于这个特定的查询经过的时间减少了。 原 PROFILE MATCH(m:Movie) WHERE m.year 2015 OPTIONAL MATCH (a:Person)-[:ACTED_IN]-(m) WITH m, collect(DISTINCT a.name) AS Actors OPTIONAL MATCH (m)-[:DIRECTED]-(d:Person) RETURN m.title AS Movie, Actors, collect (DISTINCT d.name) AS Directors模式 PROFILE MATCH (m:Movie) WHERE m.year 2015 RETURN m.title AS Movie,[(dir:Person)-[:DIRECTED]-(m) | dir.name] AS Directors,[(actor:Person)-[:ACTED_IN]-(m) | actor.name] AS Actors模式理解条件的过滤 MATCH (a:Person {name: Tom Hanks}) RETURN [(a)--(b:Movie) WHERE b.title CONTAINS Toy | b.title ]AS Movies返回的列表添加更多属性相当于Oracle中的合并列 相当于不重复属性的collect()注模式理解下的属性可能为0所有用size()定义 MATCH (a:Actor)-[:ACTED_IN]-(m:Movie) WHERE 2000 m.year 2005 AND a.born.year 1980 RETURN a.name AS Actor, a.born AS Born,collect(DISTINCT m.title) AS Movies ORDER BY ActorMATCH (a:Actor) WHERE a.born.year 1980 WITH a, [(a)-[:ACTED_IN]-(m:Movie) WHERE 2000 m.year 2005 | m.title] AS Movies WHERE size(Movies) 0 RETURN a.name as Actor, a.born as Born, MoviesMATCH (a:Person {name: Tom Hanks}) RETURN [(a)--(b:Movie) WHERE b.title CONTAINS Toy | b.title : b.year] AS Movies