我试图在@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(...),所有操作都很好。我的D图形版本是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
}我做错了什么?
发布于 2019-04-26 19:16:51
下面是Dgraph对值变量的看法(强调是添加的):https://docs.dgraph.io/query-language/#value-variables
值变量存储标量值。值变量是从封闭块的UID到相应值的映射。 因此,只有在匹配相同UIDs 的上下文中使用值变量的值才有意义,如果在匹配不同UID的块中使用,则值变量是未定义的。
start_ua和recorded_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
}
}
}
}我还将(first: 1)添加到start_ua谓词中,以便最多获取一个节点并存储sua变量。如果您的数据已经以这种方式构造,那么就不需要这样做了。
val(sua)获取变量sua的值。
https://stackoverflow.com/questions/55741592
复制相似问题