Угловой каминный массив array_contains на объектах - PullRequest
0 голосов
/ 28 августа 2018

У меня есть следующий документ:

{
    "ID" : "01",
    "Name" : "A1",
    "players" : [ {
        "active" : false,
        "name" : "dissident"
      }, {
        "active" : false,
        "name" : "ink"
      }
    ]
}

Написал это в JSON, чтобы его было легче понять. Теперь, что я хочу сделать с firestore, это запрос по имени игроков [*]. Я видел новую опцию использования "array_contains".

Но я видел, что все примеры используют массив строк вместо массива объектов. Можно ли запросить у игрока [*]. Name?

Вот что я попробовал:

this.afs.collection('Locations', ref => ref.where('players.name', 'array-contains', _name))

На основании реакции @camden_kid, которую я строю:

this.locationsCollection = this.afs.collection('Locations', ref => ref.where('players', 'array-contains', {active : false, name : _name}) );
if(this.locationsCollection === undefined){
    this.locationsCollection = this.afs.collection('Locations', ref => ref.where('players', 'array-contains', {active : true, name : _name}) );
}

Но это зависит от активного значения to, это не сработает в любой ситуации.

Ответы [ 2 ]

0 голосов
/ 17 июля 2019

Вы не можете использовать это для объектов так, как вы ищете один параметр. Firestore не поддерживает это (досадно). Я посмотрел на несколько способов сделать это. Курс «Моделирование пожаров» Джона Делани направлен на решение этих и других проблем.

Лучше было бы иметь два массива, один из которых содержит только id / guids в качестве строк, и использовать для этого массив-содержимое.

Если вам все еще нужны объекты, просто создайте / имейте второй массив с объектами, а когда вы добавляете объекты к одному, вы добавляете строку к другому.

0 голосов
/ 28 августа 2018

Вы можете попробовать протестировать весь объект, например,

this.afs.collection('Locations', ref => ref.where('players', 'array-contains', {active : false, name : _name}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...