我正在使用Firestore並收集文檔。對於集合中的每個文檔,我想更新其中的一個字段。如何在Firestore中進行批量更新
使用事務來執行更新將是低效的,因爲我不需要在更新它時讀取任何數據。
批量更新似乎是正確的方向,但文檔不包括一次更新多個文檔的示例。請參閱:Batched Writes
我正在使用Firestore並收集文檔。對於集合中的每個文檔,我想更新其中的一個字段。如何在Firestore中進行批量更新
使用事務來執行更新將是低效的,因爲我不需要在更新它時讀取任何數據。
批量更新似乎是正確的方向,但文檔不包括一次更新多個文檔的示例。請參閱:Batched Writes
如果您使用過Firebase數據庫,則不可能以原子方式寫入完全單獨的單獨位置,這就是爲什麼您必須使用批量寫入,這意味着要麼所有操作都成功,要麼都不是被應用。
關於Firestore,所有操作現在都是原子性的。但是,可以將多個寫入操作作爲包含set(),update()或delete()操作的任意組合的單個批處理執行。一批寫入以原子方式完成,並可寫入多個文檔。
這是一個關於批量操作寫入,更新和刪除操作的簡單示例。
WriteBatch batch = db.batch();
DocumentReference johnRef = db.collection("users").document("John");
batch.set(johnRef, new User());
DocumentReference maryRef = db.collection("users").document("Mary");
batch.update(maryRef, "Anna", 20); //Update name and age
DocumentReference alexRef = db.collection("users").document("Alex");
batch.delete(alexRef);
batch.commit().addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
// ...
}
});
調用批處理對象commit()
方法意味着你犯了整批。
感謝您的快速回復,但我的問題是如何對集合中的每個文檔執行批量更新。這個答案重申了我提供的文檔鏈接中指出的內容,該文檔對單個文檔執行單獨寫入。 –
這很簡單。從集合中獲取所有這些文檔並使用上述模型,使用所需的數據更新這些文檔。 –
因此,爲了增加一些與查詢匹配的文檔中的計數,您必須將每個文檔讀入內存,然後將每個文檔都寫回去?自從1995年以來,MySQL一直可以[直接更新數據庫](https://dev.mysql.com/doc/refman/8.0/en/update.html),[MongoDB也支持多文檔更新] (https://docs.mongodb.com/manual/reference/method/db.collection.update/#example-update-specific-fields) - 但Firestore不?進步很多,驚歎數據庫,很哇! –
您鏈接的文檔有批量寫入的示例。 –
我明白如何使用批量寫入。我在詢問如何爲集合中的每個文檔執行更新。 –