Пожарная служба: получите наблюдаемый do c из другого поля, которое не является идентификатором - PullRequest
0 голосов
/ 30 марта 2020

Я хочу получить один Observable из коллекции, но я хочу получить его из другого поля, которое не является идентификатором. Это возможно?

Я не хочу делать запрос и ограничить 1. Мне нужно получить Single Observable, а не массив Observable.

Схема:

Schema

Код:

this.afs.doc<Credit>('credits/uid/'+ uid).valueChanges();

Ошибка:

Неверная ссылка на документ. Ссылки на документы должны иметь четное количество сегментов, но у credits / uid / d1Zt8sozYqb6H27lhoJgF1Gx2Cc2 есть 3

1 Ответ

0 голосов
/ 30 марта 2020

Я не уверен, правильно ли я понимаю, но я предполагаю, что вы хотите получить документ с определенным значением поля uid, не используя идентификатор документа.

Эта конкретная ошибка связана с общей функцией Firestore , что каждый документ должен быть в коллекции, а не в документе. Таким образом, значения path для документов (также вложенных) всегда проверяются, если число сегментов (разделенное на /) является четным. collection1/doc1/collection2/doc2/collection3/doc3

В результате в вашем коде у нас есть 3 сегмента (например, credits/uid/<uid_value>), так что это ошибка.

Я не очень знаком с самим angularFire2, но я это сделал в JS. Подход обычно заключается в том, чтобы запросить коллекцию, а затем использовать метод для результатов, который в classi c JS возвращает Query объект, для которого могут использоваться те же методы, что и в CollectionReference (что расширяет 'Query', кстати - ссылка 1 ).

Комбинируя этот подход с этими ссылками: запрос и коллекция Я предлагаю следующее решение:

this.afs.collection('credits', ref => ref.where('uid', '==', <uid_value>)).valueChanges()

Если uid_value будет уникальным, вы должны получить до c.

К сожалению, у меня нет площадки для тестирования решения, поэтому, пожалуйста, дайте мне знать, как оно работает - или если будут какие-либо дополнительные ошибки.

Надеюсь, это поможет! Удачи!

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