【问题标题】:Query variables in Dgraph filter在 Dgraph 过滤器中查询变量
【发布时间】:2019-04-18 08:02:26
【问题描述】:

我试图在@filter(ge(...)) 调用中使用变量(它是一个标量),但我遇到了错误

给定以下查询

{
  ua(func: uid(0xfb7f7)) {
    uid
    start_ua {
      sua as index
    }
    recorded_in {
      actions @filter(ge(index, sua)){
        index
      }
    }
  }
}

我收到以下错误

{
  "errors": [
    {
      "code": "ErrorInvalidRequest",
      "message": "Some variables are defined but not used\nDefined:[sua]\nUsed:[]\n"
    }
  ],
  "data": null
}

现在,如果我从查询中删除 sua as ...@filter(...),一切正常。 我的 Dgraph 版本是 v1.0.13。

我尝试将@filter(ge(index, sua)) 替换为@filter(ge(index, val(sua))),但仍然遇到错误:

{
  "errors": [
    {
      "code": "ErrorInvalidRequest",
      "message": ": No value found for value variable \"sua\""
    }
  ],
  "data": null
}

我做错了什么?

【问题讨论】:

    标签: dgraph


    【解决方案1】:

    以下是 Dgraph 文档对值变量的看法(已添加重点):https://docs.dgraph.io/query-language/#value-variables

    值变量存储标量值。值变量是来自 UID 的映射 封闭块的对应值。

    因此,只有在 匹配相同 UID 的上下文 - 如果在匹配不同的块中使用 UID 值变量未定义

    start_uarecorded_in 是不同的子图,这意味着在同一查询块中,一个定义的变量在另一个中未定义。

    您可以做的是使用多个查询块。变量可以跨块访问:

    {
      block1(func: uid(0xfb7f7)) {
        uid
        start_ua (first: 1) {
          sua as index
        }
    
      }
      
      block2(func: uid(0xfb7f7)) {
        recorded_in {
          actions @filter(ge(index, val(sua))) {
            index
          }
        }
      }
    }
    

    我还在 start_ua 谓词中添加了(first: 1),以便最多获取 1 个节点并存储sua 变量。如果您的数据已经采用这种方式构建,则不需要这样做。

    val(sua)获取变量sua的值。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    • 2023-02-24
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多