Могу ли я запросить документы и отфильтровать некоторые поля документа из ответа querySnapshot, используя Firestore? - PullRequest
0 голосов
/ 31 мая 2019

Представьте себе, что у меня есть коллекция документов:

коллекция: 'products'

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

document product1:

{
  id: 'someUniqueKey',
  title: 'This is the title',
  price: 35.00,
  heavyField: [
    'longStringxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    'longStringxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    'longStringxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    'longStringxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    'longStringxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    'longStringxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
}

Могу ли я запросить эти документы внутри productsсобрать и оставить этот конкретный heavyField из моего ответа?

Я хотел бы иметь возможность отфильтровать документы с 1 из их полей.Может быть, выберите поля, которые я хочу получить на моем клиенте.

Возможно ли это?Или в этом случае лучше структурировать мои данные по-другому и оставить heavyField в другой коллекции?

1 Ответ

1 голос
/ 31 мая 2019

В SQL это будет называться « проекция » в запросе.Cloud Firestore не поддерживает проекции из SDK для веб-сайтов и мобильных клиентов.Вместо этого вы должны поместить свои «тяжелые» поля в документы в другой коллекции и запрашивать их только по мере необходимости.

Если вам интересно, почему, это частично связано с тем, как работает локальный уровень персистентности клиента,Это сделало бы кеширование намного более сложным, если бы только определенные поля существовали локально для данного документа.Гораздо проще просто извлечь и сохранить весь документ, поэтому не возникает вопросов, доступен ли документ локально.

Для целей моделирования данных лучше всего рассматривать документы как «атомные единицы».", все или ничего, это не может быть сломано.

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