Запросите подколлекцию в базе данных Firestore с помощью облачных функций - PullRequest
0 голосов
/ 28 октября 2019

Недавно я решил перенести свою базу данных Firebase в Cloud Firestore . Я предполагал, что это будет огромное улучшение базы данных в реальном времени , но я боюсь, что это не такВ любом случае, я попал в ситуацию, в которой я хочу иметь возможность фильтровать элементы в подколлекции документа.

Моя структура выглядит следующим образом:

Mailboxes: [
    {
        id: vhR4bfqyo9Uqn2ONbgPv,
        address: "Address 1",
        packages: [
            {
                id: qyo9Uqn2vhR4bfqy,
                value: "0011"
            },
            {
                id: 9Uqn2qyovqyhR4bf,
                value: "0022"
            }
        ]
    },
    {
        id: BBR4bfqyo9Uqn2ONbEpn,
        address: "Address 2",
        packages: [
            {
                id: qn2vhR4bfqyqyo9U,
                value: "0066"
            }
        ]
    }
]

Представьте себе, что яу меня есть значение пакета, и я хочу видеть, существует ли этот пакет в почтовом ящике с идентификатором vhR4bfqyo9Uqn2ONbgPv .

То, что я до сих пор пробовалследующее (и некоторые его разновидности):

db.collection('Mailboxes').doc('vhR4bfqyo9Uqn2ONbgPv').listCollections().then(collections => {
    let collRef = collections.find("id", "==", "packages");
    // And, from here on, I assume I will be able to filter the items in the collection somehow.
    return 0;
});

Но затем я получаю сообщение об ошибке в моей облачной функции Firebase, говорящее:

TypeError: id не является функцией вArray.find (собственный) в db.collection.doc.listCollections.then.collections

1 Ответ

1 голос
/ 28 октября 2019

Здесь packages - это массив, а не поднабор Firestore как таковой.

С поднабором ваш запрос будет выглядеть так:

db.collection('Mailboxes').doc('vhR4bfqyo9Uqn2ONbgPv')
.collection('packages').where('value','==', '0022').get()

Если я понимаюваш вариант использования правильно ...

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