簡體   English   中英

如何在 Firestore 的不同子集合中簡化我的代碼添加/更新文檔?

[英]How to simplify my code add/update Document in different sub-Collection in Firestore?

我的數據庫如下所示:

- Data
 - Document
  - Sub-Collection A
   * Document A
   - Sub-Collection B
    * Document B

這是我的代碼:

我想添加/更新的東西:

HashMap<String, Object> isiData = new HashMap<>();
isiData.put("message", msg);
isiData.put("time", FieldValue.serverTimestamp());

添加/更新到文檔 A:

db.collection("Data")
                .document("Document")
                .collection("Sub-Collection A")
                .document("Document A")
                .set(isiData, SetOptions.merge())
                .addOnCompleteListener(task -> {
                    // Success update document A
                })
                .addOnFailureListener(e -> {
                    // Failure
                });

添加/更新到文檔 B:

 db.collection("Data")
                .document("Document")
                .collection("Sub-Collection A")
                .document("Document A")
                .collection("Sub-Collection B")
                .document("Document B")
                .set(isiData, SetOptions.merge())
                .addOnCompleteListener(task -> {
                    // Success update document B
                })
                .addOnFailureListener(e -> {
                    // Failure
                });

我想做的是:

如何使用一次性代碼簡化對文檔 A 和文檔 B 的代碼添加/更新?

DocumentReference 的set(Object data)方法返回一個任務object。 話雖如此,您可以將兩個寫入操作保存到 Task 對象中,然后簡單地將它們傳遞給 Tasks 的whenAll(Task...<?> tasks)方法,如下面的代碼行所示:

Task<Void> firstTask = db.collection("Data")
            .document("Document")
            .collection("Sub-Collection A")
            .document("Document A")
            .set(isiData, SetOptions.merge())
Task<Void> secondTask = db.collection("Data")
            .document("Document")
            .collection("Sub-Collection A")
            .document("Document A")
            .collection("Sub-Collection B")
            .document("Document B")
            .set(isiData, SetOptions.merge())
Tasks.whenAll(firstTask, secondTask).addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
    public void onComplete(@NonNull Task<Void> task) {
        if (task.isSuccessful()) {
            Log.d(TAG, "The objects were successfully added.");
        }
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM