Как создать и гарантировать уникальные ценности в коллекции пожарных? - PullRequest
0 голосов
/ 03 октября 2019

Допустим, у нас есть коллекция order в пожарном депо, где каждый заказ должен иметь уникальный читаемый случайный номер заказа с, скажем, 8 цифрами:

{
    orderNumber: '19456734'
}

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

Примечание : Одним из решений будет запрос существующих документов перед сохранением, но это не работает в параллельном сценарии, когда несколько заказов поступают одновременно (?).

1 Ответ

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

Чтобы гарантировать, что какое-то значение является уникальным в коллекции, проще всего использовать это значение в качестве ключа / идентификатора для документов в этой коллекции. Поскольку ключи / идентификаторы по определению уникальны в своей коллекции, это неявно обеспечивает соблюдение ваших требований.

Единственный встроенный способ создания уникальных идентификаторов - это , вызывающий метод add() , которыйгенерирует UUID для нового документа. Если вы не хотите использовать UUID для идентификации ваших заказов, вам придется запустить собственный механизм.

Два наиболее распространенных подхода:

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

  2. Храните глобальный счетчик (обычно в документе в известном месте)последнего выданного вами идентификатора, а затем прочитайте-увеличьте-запишите его в транзакции, чтобы получить идентификатор для любого нового документа. Обычно это то, что делают другие базы данных для своих встроенных полей автоидентификации.

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