У меня есть схема
<friend>: uid .
<owns_pet>: uid .
<person.age>: int @index(int) .
<person.name>: string @index(fulltext, term, trigram) .
<pet.name>: string @index(fulltext, term) .
с данными
{
set {
_:a1 <person.name> "A1" .
_:a1 <person.age> "43" .
_:a2 <person.name> "A2" .
_:a2 <person.age> "33" .
_:a3 <person.name> "A3" .
_:a3 <person.age> "37" .
_:a1 <friend> _:a2 .
_:a1 <friend> _:a3 .
_:a3 <friend> _:a2 .
_:p2 <pet.name> "P2" .
_:p3 <pet.name> "P3" .
_:a2 <owns_pet> _:p2 .
_:a3 <owns_pet> _:p3 .
}
}
Можно ли создать запрос, который возвращает только лиц, у которых есть друг, и у этого друга есть домашнее животное с именем "P3"? Я ожидаю увидеть в результате
"result": [
{
"name": "A1",
"age": 43
}
]
На данный момент я смог запросить:
{
result (func: has(person.name)) @filter(has(friend)) {
name: person.name
age: person.age
friend @filter(has(owns_pet)) {
owns_pet @filter(eq(pet.name, "P3")) {
}
}
}
}
но это также возвращает человека "A3"