Исключить динамически созданные массивы и карты из индексации Firestore - PullRequest
0 голосов
/ 20 июня 2019

У меня есть коллекция users, которая содержит документы в этом формате:

submittedAnswers: Map<String (QuestionId), Array<String (answer)>>,
subscribedChannels: Map<String (ChannelId), Map<Preferences>>,
etc etc the usual

Здесь, оба они являются картами из строк идентификатора в массив или карту, которая динамически генерируется моим клиентом. В первом случае это массив ответов, который может быть буквально любой строкой, представленной пользователем. Во втором случае это карта «предпочтений», которая также полностью зависит от пользователя относительно того, какие есть пары ключ-значение, которые должны быть переданы другим людям.

Firebase говорит, что если вы не планируете делать запросы на основе чего-либо, вы должны исключить его из своих индексов. Тем не менее, я планирую выполнить запрос на основе того, включает ли user.submittedAnswers определенный вопрос, и если user.subscribeedChannels включает определенный идентификатор канала. Я не хочу создавать накладные расходы путем индексации определенных значений, соответствующих этим идентификаторам, однако, поскольку я никогда не собираюсь делать запросы на их основе, я получаю только документ с ними. Вы можете сказать, почему бы не создать новый документ для хранения этих? Но документы будут очень маленькими (например, документ может быть просто массивом из 4-5 20-символьных строк, что бессмысленно) и добавит ненужные операции чтения, что в конечном итоге будет стоить мне, так как мне всегда нужно будет загружать представил ответы хотя бы в мой клиент.

Есть ли способ избежать этих проблем? Или я просто неправильно структурирую свои данные?

РЕДАКТИРОВАТЬ: я собираюсь запросить на основе ключей, но не на основе значений любой карты. Ключи - идентификаторы, но значения обеих карт являются динамическими, и поэтому я не могу предопределить их в «исключениях» для индексов с одним полем. Клиент сделает

document.setData({"submittedAnswers": {"newQuestionId": ["user answer", "user answer 2"]})

когда пользователь отвечает на конкретный вопрос, а затем делает запрос позже, говоря

document.where("submittedAnswers.oldQuestionId", ">", "")

когда нужно проверить, на какой вопрос уже дан ответ. Эти идентификаторы вопросов также не могут быть известны заранее, поскольку они представляют собой идентификаторы UUID, сгенерированные по мере публикации вопросов.

По сути, мне нужен способ сказать облачному пожарному хранилищу: «Не индексируйте любые значений этой огромной карты, неважно, что они есть, но индексируйте ключи».

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