如何更新Firestore集合中的所有文档?

时间:2020-06-14 13:41:28

标签: java android google-cloud-firestore

我想更改集合中所有文档中的单个字段。我如何在Java中做到这一点? 馆藏结构:

"Users"
      == SCvm1SHkJqQHQogcsyvrYC9rhgg2 (user)
              - "isPlaying" = false   (field witch I want to change)

      == IOGgfaIF3hjqierH546HeqQHhi30
              - "isPlaying" = true

我尝试使用类似的方法,但这是可行的

 fStore.collection("Users").document().update("isPlaying", false);

我进行了研究,发现question about the same problem,但这是我不理解的JavaScript语言。谢谢。

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

要更新文档,您必须知道该文档的完整路径。如果您不知道完整路径,则需要load each document from the collection确定该路径,然后对其进行更新。

类似的东西:

db.collection("Users")
    .get()
    .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
            if (task.isSuccessful()) {
                for (QueryDocumentSnapshot document : task.getResult()) {
                    Log.d(TAG, document.getId() + " => " + document.getData());

                    document.getReference().update("isPlaying", false);
                }
            } else {
                Log.d(TAG, "Error getting documents: ", task.getException());
            }
        }
    });

此代码大部分是从文档中复制/粘贴的,因此我建议在此花费更多时间。

答案 2 :(得分:1)

您可以使用getDocuments()检索集合中的所有文档,然后更新每个文档。完整的代码是:

//asynchronously retrieve all documents
    ApiFuture<QuerySnapshot> future = fStore.collection("Users").get();
    List<QueryDocumentSnapshot> documents = future.get().getDocuments();
    for (QueryDocumentSnapshot document : documents) {
      document.getReference().update("isPlaying", true);
    }