Как вернуть список документов arangodb, соответствующих элементу в списке? - PullRequest
0 голосов
/ 05 августа 2020

Используя python и AQL, я пытаюсь вернуть список вершин, соответствующих любому элементу в данном списке. Текущий результат из получаемой базы данных - пустой список.

Эквивалент python будет следующим:

list_of_terms = ["yellow", "blue"]
list_of_vertices = ["yellow", "green"]

terms = [term for term in list_of_terms if term in list_of_vertices]

print(terms)

Пример одного AQL-запроса, который я пробовал.

For doc in some_collection
    FILTER doc.name==@list_of_terms
    RETURN doc

И полная функция с использованием python-arango

bind_vars = {
    "lookup_terms": list_of_terms
   } 

Заранее спасибо

qry = "FOR doc IN `{0}` FILTER doc.name== @lookup_terms AND doc.text != null RETURN doc".format(collection_nm)
print(qry)
cursor = db.aql.execute(
    qry,
    bind_vars=bind_vars,
    batch_size=10,
    count=True
    )

1 Ответ

1 голос
/ 06 августа 2020

Вы должны использовать оператор IN:

FOR doc IN some_collection
    FILTER doc.name IN @list_of_terms
    RETURN doc

Из документации:

IN: проверьте, содержится ли значение в массиве

См. https://www.arangodb.com/docs/stable/aql/operators.html#range -оператор

Ваш код python будет выглядеть следующим образом:

bind_vars = {
    "lookup_terms": list_of_terms
} 
qry = "FOR doc IN `{0}` FILTER doc.name IN @lookup_terms AND doc.text != null RETURN doc".format(collection_nm)
print(qry)
cursor = db.aql.execute(
    qry,
    bind_vars=bind_vars,
    batch_size=10,
    count=True
)
...