Ioni c 4 Firestore возможно ли прочитать только часть документа? - PullRequest
0 голосов
/ 02 февраля 2020

Надеюсь, ты в порядке! Спасибо за прочтение.

Отредактировал вопрос.

Скажем, в одном документе в хранилище есть объекты, которые хранятся следующим образом:

someida: {name: steve, alias: cap, etc}
someidb: {name: tony, alias: iron, etc}
someidc: {name: nat, alias: black, etc}
someidetc

И я знаю все "someids", я Я думаю, что ответ может быть нет, но

Можно ли написать запрос, который будет читать только то, что находится внутри одного из этих someids??

В настоящее время я могу получить данные, которые мне нужны, но после прочтения всего документа и кодирования, чтобы найти его, я подумал, можно ли этого избежать, и просто прочитал содержимое одного объекта, поскольку у меня есть «someid».

Уже был опубликован отличный ответ , просто интересно, есть ли еще какие-нибудь предложения.

Заранее спасибо большое! Лучший!

1 Ответ

1 голос
/ 02 февраля 2020

Самый простой способ - это немного реструктурировать ваш документ. Вместо того, чтобы хранить каждый «someid» как свойство, создайте массив карт в виде отдельного свойства в документе Firestore. Например, следующий документ будет выглядеть следующим образом:

ids: [
      {id: someida, name: steve, alias: cap, etc},
      {id: someidb, name: tony, alias: iron, etc},
      {id: someidc, name: nat, alias: black, etc}
]

, где id , name , alias являются свойствами объект, а ids - это массив типа этого объекта.

Теперь вы можете легко извлечь нужные данные из этого массива в своем приложении. Так как вы, вероятно, используете AngularFire, вы можете получить этот документ, вызвав следующий API в ngOnInit:

ngOnInit() {
  this.users = await this.angularFirestore.collection(YOUR_COLLECTION).doc(YOUR_DOCUMENT).get()
    .pipe(map(result => result.data().ids as Array<OBJECT_TYPE>))
    .toPromise();
}

getAlias(requestedId: string) {
  return this.users.find(ob => ob.id === requestedId).alias;
}

isUserAvailable(requestedId: string): boolean {
  return !!this.users.find(ob => ob.id === requestedId);
}

Чтобы получить псевдоним из "someid c", вы можете вызвать следующая функция: this.getAlias("someidc")

И чтобы узнать, доступен ли определенный идентификатор: this.isUserAvailable("someida")

Конечно, обязательно вызовите эти функции после того, как вы сделали свой вызов Пожарная. ngOnInit должен позаботиться об этом за вас.

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