array_contains запрос на объекты - PullRequest
0 голосов
/ 22 сентября 2018

Если бы у меня было поле в каждом документе коллекции , называемой array_field, которая состоит из элементов типа object, я мог бы запросить конкретный поле в объектах ?

- collection

  - document1
    - array_field
      0: { type: tree, age: 143 }
      1: { type: sunflower, age: 1 }
      2: { type: fungus, age: 3 }

  - document2
    - array_field
      0: { type: plane, age: 38 }
      1: { type: plant, age: 2 }
      2: { type: fungus, age: 1 }

Существует ли возможность запроса для каждого документа, который имеет объект в его array_field с типом fungus?

Если это невозможно, есть ли способ запросить документы, указав точный object?
Я не знаю, как мне поступить при написании запроса:.where('array_field', 'array_contains', /*how do I define this object*/).Будет ли это просто объект JSON, подобный этому: {type: fungus, age: 2}?

Запрос, который я стремлюсь выполнить, следующий:

where('array_field', 'array_contains', 'type:fungus')

, который будет возвращать document1 и document2, но я не смог найти никаких подсказок по синтаксису для случая, подобного этому.

1 Ответ

0 голосов
/ 22 сентября 2018

Это невозможно с текущей структурой ваших данных.Аргумент array_contains работает только при сопоставлении всего содержимого элемента массива, а не только конкретных полей объекта.

Вместо этого вы можете реструктурировать свои данные, чтобы использовать объект с уникальными типами и логическое значение, чтобы вы могли запросить что-то вроде types.fungus == true:

document
    types {
        fungus: true
        plant: true
    }

Обычно в базе данных nosql дублируют данные, чтобы удовлетворить конкретные запросы, которые вам нужно выполнить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...