Как запросить элементы Firebase с определенным типом ссылки - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть родительская коллекция categories и ее дочерняя коллекция directories Directories, связанная с Categories через Category свойство

enter image description here

Я хочу запросить все каталоги с категорией, равной level

this.firestore
      .collection<any>('directories', ref => ref.where('categories', '==', 'levels'))
      .get()
      .pipe(
        map(x => {
          const out: [] = [];
          x.forEach(y => {
            out.push(y.data());
          });
          return out;
        })
      );

В ответ я получаю пустой массив.Как бы вы это исправили?

ОБНОВЛЕНИЕ на основе ответа , предоставленного @ renaud-tarnec:

const categoryDocRef = this.firestore.doc('categories/levels');
this.firestore
      .collection<any>('directories', ref => ref.where('categories', '==', categoryDocRef))
      .get()
      .pipe(
        map(x => {
          const out: [] = [];
          x.forEach(y => {
            out.push(y.data());
          });
          return out;
        })
      );

Теперь с ошибкой core.js:15713 ERROR Error: Function Query.where() called with invalid data. Unsupported field value: a custom AngularFirestoreDocument object

1 Ответ

0 голосов
/ 25 февраля 2019

Если вы хотите использовать в запросе тип данных DocumentReference , вы должны создать DocumentReference и использовать его в своем запросе следующим образом (в «стандартном» JavaScript):

        const categoryDocRef = firebase.firestore().doc('categories/levels');

        firebase.firestore().collection("directories").where("parent", "==", categoryDocRef)
        .get()
        .then(function(querySnapshot) {
           querySnapshot.forEach(function(doc) {
              console.log(doc.id, " => ", doc.data());
           });
        })
        .catch(function(error) {
           console.log("Error getting documents: ", error);
        });

Я сделал предположение, что документы, содержащие поле parent (которое, в свою очередь, содержит данные типа DocumentReference), находятся в коллекции с именем directories.


* 1011.* ОБНОВЛЕНИЕ: Похоже, что следующее не будет работать с angularFire2, см. Комментарии

Так что, если я не ошибаюсь, это будет сделано в угловом порядке, основываясь накод вашего вопроса:

const categoryDocRef = this.firestore.doc('categories/levels');

this.firestore
      .collection<any>('directories', ref => ref.where('parent', '==', categoryDocRef))
      .get()
      ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...