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

Java 更新Firestore集合中找到的所有文档中的字符串字段,java,android,google-cloud-firestore,Java,Android,Google Cloud Firestore,基本上,我想知道是否有可能更新Firestore集合中的所有文档。我能够获得列表中的所有文件,如下所示: mFirebaseFirestore.collection("Events").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() { @Override public void onComplete(@NonNull Task<QuerySnapshot> task)

基本上,我想知道是否有可能更新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());
        }
    }
});
mFirebaseFirestore.collection(“Events”).get().addOnCompleteListener(新的OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
列表=新的ArrayList();
对于(QueryDocumentSnapshot文档:task.getResult()){
list.add(document.getId());
}
Log.d(TAG,list.toString());
}否则{
Log.d(标记“获取文档时出错:”,task.getException());
}
}
});

但是,我似乎无法同时更新所有文档或这些文档中的类似字符串。如果上述操作不可行,那么可以采取什么措施来更新所有文档。

没有一个操作可以根据som搜索条件更新多个文档。您必须像现在这样迭代查询结果,然后分别更新每个文档。您也可以使用原子方式执行更新,但这不会阻止您迭代初始查询结果中的所有文档。

没有一个操作会根据som搜索条件更新多个文档。您必须像现在这样迭代查询结果,然后分别更新每个文档。您也可以使用来以原子方式执行更新,但这不会阻止您迭代初始查询结果中的所有文档。

为了更新集合中的所有文档,您必须首先检索列表中的所有文档,然后迭代该列表并更新它们。下面是一个示例代码:-

for (int k = 0; k < list.size(); k++) {
    firestore.collection("Events").document(list.get(k))
        .update("Key", value).addOnSuccessListener(new OnSuccessListener<Void>()
            {
                @Override
                public void onSuccess(Void aVoid) {
                    Log.i("Update", "Value Updated");

                }
             })
             .addOnFailureListener(new OnFailureListener() {
                 @Override
                 public void onFailure(Exception e) {
                     Toast.makeText(MainActivity.this, "Error In Updating Details: " + e.getMessage(), Toast.LENGTH_SHORT).show();
                 }
    });
}
for(int k=0;k
要更新集合中的所有文档,首先必须检索列表中的所有文档,然后迭代该列表并更新它们。下面是一个示例代码:-

for (int k = 0; k < list.size(); k++) {
    firestore.collection("Events").document(list.get(k))
        .update("Key", value).addOnSuccessListener(new OnSuccessListener<Void>()
            {
                @Override
                public void onSuccess(Void aVoid) {
                    Log.i("Update", "Value Updated");

                }
             })
             .addOnFailureListener(new OnFailureListener() {
                 @Override
                 public void onFailure(Exception e) {
                     Toast.makeText(MainActivity.this, "Error In Updating Details: " + e.getMessage(), Toast.LENGTH_SHORT).show();
                 }
    });
}
for(int k=0;k
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!
        }
    });

}
void getData(){
mFirebaseFirestore.collection(“Events”).get().addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
列表=新的ArrayList();
对于(QueryDocumentSnapshot文档:task.getResult()){
list.add(document.getId());
}
Log.d(TAG,list.toString());
更新数据(列表);//***新***
}否则{
Log.d(标记“获取文档时出错:”,task.getException());
}
}
});
}
无效更新数据(ArrayList列表){
//获取新的写入批处理
WriteBatch batch=db.batch();
//反复浏览列表
对于(int k=0;k

文档:

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!
        }
    });

}
void getData(){
mFirebaseFirestore.collection(“Events”).get().addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
列表=新的ArrayList();
对于(QueryDocumentSnapshot文档:task.getResult()){
list.add(document.getId());
}
Log.d(TAG,list.toString());
更新数据(列表);//***新***
}否则{
Log.d(标记“获取文档时出错:”,task.getException());
}
}
});
}
无效更新数据(ArrayList列表){
//获取新的写入批处理
WriteBatch batch=db.batch();
//反复浏览列表
对于(int k=0;k