【问题标题】:Delete single value from Cloud Firestore Array从 Cloud Firestore 数组中删除单个值
【发布时间】:2019-06-17 03:06:34
【问题描述】:

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

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

【问题讨论】:

    标签: android google-cloud-firestore


    【解决方案1】:

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

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

    试试这个:

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

    【讨论】:

      【解决方案2】:

      终于想通了……

      导入类:

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

      然后使用:

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

      【讨论】:

        猜你喜欢
        • 2019-02-15
        • 2021-10-16
        • 2021-11-18
        • 2018-06-18
        • 2021-08-14
        • 1970-01-01
        • 2019-10-03
        • 2020-07-24
        • 1970-01-01
        相关资源
        最近更新 更多