Обновление Firestore внутри массива объекта - PullRequest
0 голосов
/ 06 августа 2020

У меня есть такая структура, и в ней я хочу обновить роль userId '2' до «Admin».

{
  "chats": {
    "chatThreadID": {
      "chatUsers": [
        {
          "userId": 1,
          "role": "Admin"
        },
        {
          "userId": 2,
          "role": "General"
        },
        {
          "userId": 3,
          "role": "General"
        }
      ]
    }
  }
}

Я пробовал сделать 'updateData'

"chatUsers": FieldValue.arrayRemove([oldUser.dictionary])

Тогда

"chatUsers": FieldValue.arrayUnion([updatedUser.dictionary])

Это работает, но есть ли лучший способ сделать это?

1 Ответ

2 голосов
/ 06 августа 2020

То, что вы делаете, мне кажется правильным.

Если вы хотите обновить пользователя с помощью одной операции записи, наиболее распространенной альтернативой является не сохранять пользователей в поле массива с их ролей, но сохранить пользователя + роли в поле карты:

"chatUserRoles": {
  "1": "Admin",
  "2": "General",
  "3": "General"
}

С этой структурой вы можете обновить определенного c пользователя с точечной нотацией:

"chatUserRoles."+updatedUser.dictionary.userId: updatedUser.dictionary.role

Или как буквальный текст:

"chatUserRoles.1": "General"
...