首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dgraph中的查询变量

Dgraph中的查询变量
EN

Stack Overflow用户
提问于 2019-04-18 08:02:26
回答 1查看 517关注 0票数 0

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

给定以下查询

代码语言:javascript
复制
{
  ua(func: uid(0xfb7f7)) {
    uid
    start_ua {
      sua as index
    }
    recorded_in {
      actions @filter(ge(index, sua)){
        index
      }
    }
  }
}

我得到以下错误

代码语言:javascript
复制
{
  "errors": [
    {
      "code": "ErrorInvalidRequest",
      "message": "Some variables are defined but not used\nDefined:[sua]\nUsed:[]\n"
    }
  ],
  "data": null
}

现在,如果我从查询中删除sua as ...@filter(...),所有操作都很好。我的D图形版本是v1.0.13。

我尝试用@filter(ge(index, sua))替换@filter(ge(index, val(sua))),但仍然遇到了一个错误:

代码语言:javascript
复制
{
  "errors": [
    {
      "code": "ErrorInvalidRequest",
      "message": ": No value found for value variable \"sua\""
    }
  ],
  "data": null
}

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-26 19:16:51

下面是Dgraph对值变量的看法(强调是添加的):https://docs.dgraph.io/query-language/#value-variables

值变量存储标量值。值变量是从封闭块的UID到相应值的映射。 因此,只有在匹配相同UIDs 的上下文中使用值变量的值才有意义,如果在匹配不同UID的块中使用,则值变量是未定义的

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

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

代码语言:javascript
复制
{
  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
      }
    }
  }
}

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55741592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档