Android 从云Firestore数组中删除单个值

Android 从云Firestore数组中删除单个值,android,google-cloud-firestore,Android,Google Cloud Firestore,我正在尝试从Cloud Firestore中的玩家数组中删除单个m80KEXuYelOGutSLtQelQkIDj9H2值 Map<String,Object> updates = new HashMap<>(); updates.put(userId, FieldValue.delete()); doc.update(updates).addOnCompleteListener(new OnCompleteListener<Void>() { @Overr

我正在尝试从Cloud Firestore中的玩家数组中删除单个m80KEXuYelOGutSLtQelQkIDj9H2值

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");
       }
      }
});```
日志显示字符串findTeam是CoolTeam1,字符串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");
       }
      }
});```

看起来您的第一个带花括号的代码示例尝试使用JavaScript语法来更新文档,而不是Java Android语法。显然,这根本行不通

也将对您起作用,因为它用于删除整个文档字段,而不是修改数组。您将希望改为使用,如中所示。确保使用JavaAndroid语法

请尝试以下方法:

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

我终于明白了

导入类:

import static com.google.firebase.firestore.FieldValue.arrayRemove;
然后使用:

db.collection("teams").document(findTeam).update("players", arrayRemove(userId));