Предотвратить повторяющиеся записи в FireStore - PullRequest
0 голосов
/ 24 марта 2020

Я создаю чат для своего приложения с firestore, где я храню чаты в отдельной коллекции. Мой документ структурирован так:

{
    participant1: "kd94992nnd9",
    participant2: "49di9niso3s",
    p1Name: "...",
    p2Name: "...",
    messages: [/*messages are stored her*/],
    //Some metadata about the chats
}

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

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Если вы храните чаты в отдельной коллекции, что вас волнует, если существуют более ранние документы чата? Если ваша структура ваша схема как:

chatRecord: {
  participants: [
    {participantID},
    {participantID},
    ...
  ],
  messages: [/* array of messages */],
  dateTag: {timestamp}
}

... вы можете тривиально запросить идентификаторы участников в массиве; ни один конкретный документ чата никогда не станет особенно большим; Вы можете сортировать их как хотите. Вы можете запрашивать, сортировать и объединять все чаты за любой выбранный вами период времени практически для любой комбинации участников. Единственная причина НЕ хранить каждое сообщение отдельно - это возможно уменьшить количество документов, прочитанных или написанных за один раз, но я сомневаюсь, что это будет важно в приложении чата.

Запомните это Нет SQL - по сути рекомендуется реплицировать данные c stati, например имена участников, в отдельные документы для более быстрых и эффективных запросов. DRY для SQL. Firestore основан на предположении, что запросы настолько эффективны, что вы действительно не должны заботиться о documentID, и при этом вы не должны пытаться втиснуть как можно больше в какой-либо отдельный документ.

0 голосов
/ 24 марта 2020

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

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