如何使用WriteBatch删除列表中的项目?

时间:2020-09-14 22:15:54

标签: java firebase google-cloud-firestore

我正在使用Firebase Cloud数据库。我查询了一个收藏并得到了一份文件清单。每个文档都包含一个包含字符串的字段cars。如果数组至少包含三个字符串,我想从该数组(而不是整个数组)中删除字符串carPath。否则,应删除整个文档。我正在使用WriteBatch。我做了什么:

fireDB.document(groupPath).collection("users").whereArrayContains("cars",carPath).get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful() && task.getResult() != null) {
            QuerySnapshot snapshot = task.getResult();
            for (DocumentSnapshot curr : snapshot.getDocuments()) {
                List<String> cars = (List<String>) curr.get("cars");
                if (cars == null) continue;
                if (cars.size() <= 2) {
                    batch.delete(snapshot.getReference());
                } else {
                    // What to do here?
                }
            }
        }
    }
});

如何使用WriteBatch删除列表中的一项?

1 个答案:

答案 0 :(得分:1)

您要尝试的只是document update。您可以使用FieldValue.arrayRemove()进行定期更新。除非您将在使用update()而不是独立更新的批处理环境中执行此操作。

batch.update(snapshot.getReference(), "cars", FieldValue.arrayRemove(carPath));