2015-01-10 8 views
3

У меня есть документ, встроенный в список, и мне нужно запросить документы, соответствующие значению серии строк.Атрибут запроса ArangoDB, встроенный в список

Мой документ:

enter image description here

Как вы можете видеть, у меня есть обычный документ. Внутри этого документа находятся «категории», которые имеют неизвестную длину для каждого документа. Внутри категорий у меня есть «доверие» и «название». Мне нужно запросить, чтобы найти документы, имеющие названия, соответствующие списку заголовков, которые у меня есть в ArrayList. Запрос я думал, что будет работать это:

FOR document IN documents FILTER document.categories.title IN @categories RETURN article

@categories является ArrayList со списком названий. Если какой-либо из заголовков в ArrayList находится в документе, я бы хотел, чтобы он был возвращен.

Этот запрос, кажется, возвращается null. Я не думаю, что он доходит до уровня сравнения ArrayList с полем «title» в моем документе. Я знаю, что могу получить доступ к списку категорий, используя [#], но я не знаю, как искать «заголовки» в «категориях».

ответ

3

Запрос

FOR document IN documents 
    FILTER document.categories.title IN @categories 
    RETURN article 

будет работать, если document.categories является скаляром, но это не будет работать, если document.categories является массивом. Причина в том, что массив с левой стороны оператора IN не будет автоматически расширен.

Чтобы найти документы, запрос может быть переписан следующим образом:

FOR document IN documents 
    FILTER document.categories[*].title IN @categories 
    RETURN document 

или

FOR document IN documents 
    LET titles = (
    FOR category IN document.categories 
     RETURN category.title 
) 
    FILTER titles IN @categories 
    RETURN document 

Кроме того, article будет неизвестно, если не будет коллекция названа article. Он должен, вероятно, читать document или document.article.