从Cloud Firestore阵列删除单个值

时间:2019-06-16 11:37:18

标签: android google-cloud-firestore

FirestoreScreenshot

我正在尝试从Cloud Firestore的"m80KEXuYelOGutSLtQelQkIDj9H2"数组中删除单个"players"值。

日志显示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());

我也尝试过使用Map更新,它也可以运行并在日志中显示“成功删除播放器”。但是不会在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 个答案:

答案 0 :(得分:1)

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

FieldValue.delete()完全可以为您工作,因为这用于删除整个文档字段,而不是修改数组。如FieldValue.arrayRemove()所示,您将改为使用documentation。请确保使用Java Android语法。

尝试以下方法:

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

答案 1 :(得分:0)

最终想通了...

导入课程:

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

然后使用:

db.collection("teams").document(findTeam).update("players", arrayRemove(userId));
相关问题