Обеспечение того, что документ не существует - PullRequest
0 голосов
/ 23 марта 2020

Я реализую чат один на один для приложения Android в Firestore. Я храню все данные чата в отдельной коллекции. Документ в этой коллекции выглядит следующим образом:

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

В моем приложении пользователь может нажать кнопку и начать чат с другим пользователем. Когда пользователь нажимает эту кнопку, я создаю новый документ в этой коллекции, который содержит userIds как пользователей, так и всех сообщений.

Чтобы избежать дублирования, я хочу убедиться, что только один документ существует для любых 2 пользователей, независимо от того, кто начал чат. Используя userIds из 2 участников, как я могу проверить, существует ли документ с их сообщениями? Я попытался использовать запрос, подобный следующему:

    DatabaseService.getDbInstance().collection("conversations")
        .whereEqualTo("participant1", currentUser.uid)
        .whereEqualTo("participant2", targetUser.uid)
        .get()

Проблема этого подхода заключается в том, что он создает второй документ, в котором переключаются значения participant1 и participant2. Пожалуйста, помогите!

1 Ответ

1 голос
/ 23 марта 2020

Проблема этого подхода заключается в том, что он создает второй документ, в котором переключаются значения participant1 и participant2.

В этом случае вам следует сначала проверить это. Поэтому перед тем, как создать еще один диалог между participant1 и participant2, проверьте, существует ли уже разговор между participant2 и participant1. Если оно существует, добавьте сообщение в этот диалог, в противном случае создайте новое.

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

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