dgraph 基本查询语法 三
Posted rongfengliang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dgraph 基本查询语法 三相关的知识,希望对你有一定的参考价值。
这部分主要是查询块、查询变量、聚合操作
多名称查询
实际上就是类似多个查询数据的拼接
格式:
{
caro(func: allofterms([email protected], "Marc Caro")) {
[email protected]
director.film {
[email protected]
}
}
jeunet(func: allofterms([email protected], "Jean-Pierre Jeunet")) {
[email protected]
director.film {
[email protected]
}
}
}
查询变量
类似graphql 总的input 变量,但是查询变量更方便,可以理解为sql 的存储过程,或者编程中的函数
var_name as some_block { ... }
查询变量数据的引用
查询变量的数据可以传递给子查询block 使用,这点相比graphql 的方式有很大的方便
参考格式:
{
coactors(func:allofterms([email protected], "Jane Campion")) @cascade {
JC_films as director.film { # JC_films = all Jane Campion‘s films
starting_movie: [email protected]
starring {
JC_actors as performance.actor { # JC_actors = all actors in all JC films
actor : [email protected]
actor.film {
performance.film @filter(not uid(JC_films)) {
film_together : [email protected]
starring {
# find a coactor who has been in some JC film
performance.actor @filter(uid(JC_actors)) {
coactor_name: [email protected]
}
}
}
}
}
}
}
}
}
指变量(min max)
使用min max 可以获取变量的最大或者最小指
参考格式:
{
q(func: allofterms([email protected], "Ang Lee")) {
director.film {
uid
[email protected]
# 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([email protected], "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 : [email protected]
# get the average
# also count the movies
}
}
指变量 filter order
指变量可以应用filter以及order 操作
参考格式:
{
ID as var(func: allofterms([email protected], "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 : [email protected]
average_actors : val(average)
num_films : count(director.film)
}
}
指变量 math
dgraph 内置math 函数操作,可以进行一些常见的+ / - 以及sin 。。。。 操作
参考格式:
{
var(func:allofterms([email protected], "Jean-Pierre Jeunet")) {
[email protected]
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)){
[email protected]
stars_per_director : val(ratio)
num_stars : val(stars)
}
}
groupby 操作
类似sql 的groupby 操作,groupby 代码块内部操作只能应用到聚合函数上,同时count 只能
应用到uid 上,同时可以方便的通过变量应用到其他查询中
参考格式:
{
var(func:allofterms([email protected], "Steven Spielberg")) {
director.film @groupby(genre) {
a as count(uid)
}
}
byGenre(func: uid(a), orderdesc: val(a)) {
[email protected]
num_movies : val(a)
}
}
参考资料
https://tour.dgraph.io/blocksvars/1/
https://github.com/rongfengliang/dgraph-docker-compose-deploy
以上是关于dgraph 基本查询语法 三的主要内容,如果未能解决你的问题,请参考以下文章