Как «заселить» в Firestore? - PullRequest
1 голос
/ 24 февраля 2020

Я новичок в Firestore и пытаюсь перенести проект MongoDB в Firestore. У меня есть следующая проблема. Моя структура данных такая:

/products
    'A': {name: 'Product A', price: 1},
    'B': {name: 'Product B', price: 2}

/profiles
    '1': {name: 'John', purchases: [ {product: 'A', quantity: 1} ] }

У меня есть коллекция продуктов и коллекция профилей. Эти профили имеют массив покупок, и каждая покупка имеет ссылку на объект для соответствующего продукта и количество. С MongoDb я мог сделать это:

const profiles = await Profiles.findById('1').populate('purchases.product', 'name price');

Таким образом, я мог бы получить следующий объект:

{
    _id: '1',
    name: 'John',
    purchases: [
        {
            {
                _id: 'A',
                name: 'Product A',
                price: 1,
            },
            quantity: 1,
        }
    ]
}

Так что одним запросом я могу получить все покупки, мне не нужно переберите все покупки и получите их по идентификатору. Как я могу добиться такой же производительности с Firestore? Также, если эта модель данных не работает с Firestore, пожалуйста, сообщите мне.

Ответы [ 2 ]

3 голосов
/ 24 февраля 2020

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

Sidenote Из-за этой проблемы моя компания перенесла некоторые данные из Firestore в mongodb Atlas, и я настоятельно рекомендую Mongodb Atlas и Sticth, которые предоставляют функции, аналогичные Firestore, при сохранении универсальности mon go. Если это имеет значение, он также имеет (хотя в бета-версии на момент написания) поддержку GraphQl.

Вывод: Нет встроенной поддержки для соединений. Тем не менее, вы можете использовать clever rx js и взломать эту проблему, в частности CombineLatest. Вот хороший ответ , чтобы вы начали

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

В Firestore единственные способы добавления документов включают либо добавление одного документа за раз (в общем oop), либо использование пакетной записи (в общем oop (до 500 документов на пакетную запись). Клиентские API не предоставляют никаких других опций.

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