Как получить документы, которые не содержат объект с определенным значением внутри массива

Например, у меня есть два документа:

{
  communication: "some data 1"
  users: [
    {
      name: 'Peter',
      role: 'admin'
      gender: 'male'
    },
    {
      name: 'John',
      role: 'guest'
      gender: 'male'
    }
  ]
}


{
  communication: "some data 2"
  users: [
    {
      name: 'Kollins',
      role: 'admin'
      gender: 'male'
    },
    {
      name: 'Steve',
      role: 'moderator'
      gender: 'male'
    }
  ]
}

Наконец, я должен получить документы, которые не имеют внутри users массив user с role: 'guest', На примере двух документов я должен получить второй. Псевдокод похож на:select * from bucket where users.role = 'guest' is missing

1 ответ

Решение

Вам необходимо сопоставить массив пользователей с ARRAY и проверьте, есть ли пользователь с NOT EXISTS

SELECT * FROM bucket WHERE NOT EXISTS ARRAY users FOR user IN users 
WHEN user.role='guest' END
Другие вопросы по тегам