3

I have a document embedded in a list, and I need to query for documents matching the value of a series of Strings.

My document:

enter image description here

As you can see, I have a regular document. Inside that document is "categories" which is of an unknown length per document. Inside categories I have "confidence" and "title". I need to query to find documents which have a titles matching a list of title I have in an ArrayList. The query I thought would work is:

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

@categories is an ArrayList with a list of titles. If any of the titles in the ArrayList are in the document, I would like it to be returned.

This query seems to be returning null. I don't think it is getting down to the level of comparing the ArrayList to the "title" field in my document. I know I can access the "categories" list using [#] but I don't know how to search for the "title"s in "categories".

1 Answer 1

3

The query

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

would work if document.categories is a scalar, but it will not work if document.categories is an array. The reason is that the array on the left-hand side of the IN operator will not be auto-expanded.

To find the documents the query could be rewritten as follows:

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

or

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

Apart from that, article will be unknown unless there is a collection named article. It should probably read document or document.article.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.