Полагаю, вы ожидаете, что этот запрос не вернет совпадающих документов, но он все равно возвращает документ, даже если значение "permissions" не соответствует ожидаемому.
Это объясняется выражением запроса FILTER:
u.gacl[* filter contains(CURRENT.permissions,'c') and CURRENT.principal == 'users/12345']
В этом выражении используется оператор звезды, который всегда создает массив в качестве результата. Поскольку никакие элементы массива не соответствуют фильтру, используемому для отдельных элементов, результатом всего выражения является просто пустой массив:
[]
Таким образом, условие FILTER запроса преобразуется в
FILTER []
И []
равно true
при преобразовании в логический фильтр (
Таким образом, при использовании этого условия FILTER каждый документ будет соответствовать.
Изменение условия на
FILTER LENGTH(u.gacl[* filter contains(CURRENT.permissions,'c') and CURRENT.principal == 'users/12345']) > 0
должен делать то, что вы хотите.