• dgraph 基本查询语法 三


    这部分主要是查询块、查询变量、聚合操作

    多名称查询

    实际上就是类似多个查询数据的拼接

    格式:
    {
      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

  • 相关阅读:
    test
    ws318 配置
    电影地址:
    白岩松给青少年的7个忠告,值得好好阅读~
    干部带队伍的四个知道,一个跟上
    CDOJ 1259 昊昊爱运动 II bitset+线段树
    codeforces 508D . Tanya and Password 欧拉通路
    poj 1041 John's trip 欧拉回路
    poj 1651 Multiplication Puzzle 区间dp
    poj 2955 Brackets 区间dp
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/9695141.html
Copyright © 2020-2023  润新知