为了账号安全,请及时绑定邮箱和手机立即绑定

更新 Firestore 集合中找到的所有文档中的字符串字段

更新 Firestore 集合中找到的所有文档中的字符串字段

猛跑小猪 2021-08-19 21:21:41
基本上,我想知道是否可以更新 Firestore 集合中的所有文档。我可以像这样获取列表中的所有文档:mFirebaseFirestore.collection("Events").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {    @Override    public void onComplete(@NonNull Task<QuerySnapshot> task) {        if (task.isSuccessful()) {            List<String> list = new ArrayList<>();            for (QueryDocumentSnapshot document : task.getResult()) {                list.add(document.getId());            }            Log.d(TAG, list.toString());            } else {                Log.d(TAG, "Error getting documents: ", task.getException());        }    }});但是,我似乎无法一次更新所有文档或这些文档中的类似字符串。如果上述方法是不可能的,那么就更新所有文档而言,有什么办法可以解决。
查看完整描述

3 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

Raj 的方法会起作用,但可能会导致进行大量写入。正如 Doug 所提到的,您可能喜欢批量写入。


void getData() {


    mFirebaseFirestore.collection("Events").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {

        @Override

        public void onComplete(@NonNull Task<QuerySnapshot> task) {

            if (task.isSuccessful()) {

                List<String> list = new ArrayList<>();

                for (QueryDocumentSnapshot document : task.getResult()) {

                    list.add(document.getId());

                }

                Log.d(TAG, list.toString());

                updateData(list); // *** new ***

            } else {

                Log.d(TAG, "Error getting documents: ", task.getException());

            }

        }

    });


}


void updateData(ArrayList list) {


    // Get a new write batch

    WriteBatch batch = db.batch();


    // Iterate through the list

    for (int k = 0; k < list.size(); k++) {


        // Update each list item

        DocumentReference ref = db.collection("Events").document(list.get(k));

        batch.update(ref, "field_you_want_to_update", "new_value");


    }


    // Commit the batch

    batch.commit().addOnCompleteListener(new OnCompleteListener<Void>() {

        @Override

        public void onComplete(@NonNull Task<Void> task) {

            // Yay its all done in one go!

        }

    });


}

文档:https : //firebase.google.com/docs/firestore/manage-data/transactions#batched-writes


查看完整回答
反对 回复 2021-08-19
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

没有一个操作可以根据某些搜索条件更新多个文档。您必须像现在一样迭代查询结果,然后单独更新每个文档。您也可以使用事务或批量写入以原子方式执行更新,但这不会让您阻止迭代初始查询结果中的所有文档。


查看完整回答
反对 回复 2021-08-19
  • 3 回答
  • 0 关注
  • 176 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信