Удалить одно значение из массива Cloud Firestore - PullRequest
0 голосов
/ 16 июня 2019

FirestoreScreenshot

Я пытаюсь удалить одно значение "m80KEXuYelOGutSLtQelQkIDj9H2" из моего массива "players" в Cloud Firestore.

Журналы показывают, что String findTeam равен CoolTeam1, а String userId равен m80KEXuYelOGutSLtQelQkIDj9H2

Мой код:

DocumentReference docRef = db.collection("teams").document(findTeam);
docRef.update({"players":FieldValue.arrayRemove(userId)});

Я получаю "Неожиданный токен" в Android Studio для { и }) в приведенном выше.

Какие идеи будут высоко оценены?

Я также попытался использовать точечную нотацию, как показано ниже, она запускается, но не удаляет значение:

db.collection("teams").document(findTeam).update("players." + userId, FieldValue.delete());

Я также пытался использовать обновление карты, оно также запускается и показывает «Удаление игрока успешно» в журнале. Но игрок не удаляется в Firestore.

Map<String,Object> updates = new HashMap<>();
updates.put(userId, FieldValue.delete());

doc.update(updates).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {

       if (task.isSuccessful()){
       Log.i(TAG, "Deleting player successful");
       }
       else{
       Log.i(TAG, "Deleting player NOT successful");
       }
      }
});```

Ответы [ 2 ]

1 голос
/ 16 июня 2019

Похоже, что ваш первый пример кода с фигурными скобками пытается использовать синтаксис JavaScript для обновления документа, а не синтаксис Java Android. Это совсем не сработает, очевидно.

FieldValue.delete () тоже будет работать на вас, поскольку он используется для удаления всего поля документа, а не для изменения массива. Вместо этого вы захотите использовать FieldValue.arrayRemove () , как показано в документации . Обязательно используйте синтаксис Java Android.

Попробуйте вместо этого:

db.collection("teams").document(findTeam).update("players",
    FieldValue.arrayRemove(userId));
0 голосов
/ 16 июня 2019

Со временем разобрался ...

Импорт класса:

import static com.google.firebase.firestore.FieldValue.arrayRemove;

Тогда используйте:

db.collection("teams").document(findTeam).update("players", arrayRemove(userId));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...