dgraph 基本查询语法 三
2018-09-24 11:50
507 查看
这部分主要是查询块、查询变量、聚合操作
多名称查询
实际上就是类似多个查询数据的拼接
格式: { caro(func: allofterms(name@en, "Marc Caro")) { name@en director.film { name@en } } jeunet(func: allofterms(name@en, "Jean-Pierre Jeunet")) { name@en director.film { name@en } } }
查询变量
类似graphql 总的input 变量,但是查询变量更方便,可以理解为sql 的存储过程,或者编程中的函数
var_name as some_block { ... }
查询变量数据的引用
查询变量的数据可以传递给子查询block 使用,这点相比graphql 的方式有很大的方便
参考格式: { coactors(func:allofterms(name@en, "Jane Campion")) @cascade { JC_films as director.film { # JC_films = all Jane Campion's films starting_movie: name@en starring { JC_actors as performance.actor { # JC_actors = all actors in all JC films actor : name@en actor.film { performance.film @filter(not uid(JC_films)) { film_together : name@en starring { # find a coactor who has been in some JC film performance.actor @filter(uid(JC_actors)) { coactor_name: name@en } } } } } } } } }
指变量(min max)
使用min max 可以获取变量的最大或者最小指
参考格式: { q(func: allofterms(name@en, "Ang Lee")) { director.film { uid name@en # Count the number of starring edges for each film num_actors as count(starring) # In this block, num_actors is the value calculated for this film. # The film with uid and name } # Here num_actors is a map of film uid to value for all # of Ang Lee's films # # It can't be used directly, but aggregations like min and max # work over all the values in the map most_actors : max(val(num_actors)) } # to use num_actors in another query, make sure it's done in a context # where the film uid to value map makes sense. }
指变量(sum avg)
可以获取变量的sum 以及avg
参考格式: { ID as var(func: allofterms(name@en, "Steven Spielberg")) { # count the actors and save to a variable # average as ... } # average is a map from uid to value so it must be used in a context # where the map makes sense. Because query block avs works over the UID # of Steven Spielberg, the value variable has the value we expect. avs(func: uid(ID)) @normalize { name : name@en # get the average # also count the movies } }
指变量 filter order
指变量可以应用filter以及order 操作
参考格式: { ID as var(func: allofterms(name@en, "Steven")) { director.film { num_actors as count(starring) } average as avg(val(num_actors)) } avs(func: uid(ID), orderdesc: val(average)) @filter(ge(val(average), 40)) @normalize { name : name@en average_actors : val(average) num_films : count(director.film) } }
指变量 math
dgraph 内置math 函数操作,可以进行一些常见的+ / - 以及sin 。。。。 操作
参考格式: { var(func:allofterms(name@en, "Jean-Pierre Jeunet")) { name@en films as director.film { stars as count(starring) directors as count(~director.film) ratio as math(stars / directors) } } best_ratio(func: uid(films), orderdesc: val(ratio)){ name@en stars_per_director : val(ratio) num_stars : val(stars) } }
groupby 操作
类似sql 的groupby 操作,groupby 代码块内部操作只能应用到聚合函数上,同时count 只能
应用到uid 上,同时可以方便的通过变量应用到其他查询中
参考格式: { var(func:allofterms(name@en, "Steven Spielberg")) { director.film @groupby(genre) { a as count(uid) } } byGenre(func: uid(a), orderdesc: val(a)) { name@en num_movies : val(a) } }
参考资料
https://tour.dgraph.io/blocksvars/1/
https://github.com/rongfengliang/dgraph-docker-compose-deploy
相关文章推荐
- dgraph 基本查询语法 二
- Oracle数据库Sql语句详解之SELECT查询基本语法
- AD LDAP 基本知识及查询语法及实例
- mysql 连接查询的基本语法
- Oracle基本查询语法-多表查询和子查询和集合运算
- sql 查询基本语法
- Hibernate 查询语句HQL基本语法
- Oracle基本语法查询语句
- [深入学习C#]LINQ查询表达式详解(1)——基本语法、使用扩展方法和Lambda表达式简化LINQ查询
- SQL的查询、添加、修改、删除基本语法结构
- MySQL 基本查询语法使用
- MySQL的一些基本语法(7)-查询数据
- elasticsearch基本查询语法笔记
- SQL Server 数据库子查询基本语法
- MDX 查询的基本语法
- sql 查询基本语法
- mysql基本的查询语法,持续更新中ing...
- ElasticSearch 基本查询语法
- 基本 MDX 查询 ( MDX 语法 教程 )
- 基本 MDX 查询 ( MDX 语法 教程 )