2017-10-20 15 views
2

J'utilise Firestore et une collection de documents. Pour chaque document de la collection, je voudrais mettre à jour l'un des champs.Comment faire une mise à jour en vrac dans Firestore

l'aide d'une transaction pour effectuer la mise à jour serait inefficace parce que je ne ai pas besoin de lire l'une des données tout en mettant à jour.

mises à jour par lots semblent comme la bonne direction, mais les documents ne sont pas des exemples de mise à jour de plusieurs documents à la fois. Voir ici: Batched Writes

+0

Les documents liés à vous a un exemple pour les écritures par lots. –

+0

Je comprends comment utiliser une écriture par lots. Je demande comment effectuer une mise à jour pour chaque document d'une collection. –

Répondre

1

Si vous avez utilisé la base de données Firebase, écriture complètement unique des endroits séparés atomiquement n'a pas été possible, c'est pourquoi vous devez utiliser lots écrit, ce qui signifie que soit réussir toutes les opérations, ou aucun d'entre eux sont appliqués.

En ce qui concerne Firestore, toutes les opérations sont maintenant atomiquement. Cependant, vous pouvez exécuter plusieurs opérations d'écriture en un seul lot contenant toute combinaison d'opérations set(), update() ou delete(). Un lot d'écritures se termine atomiquement et peut écrire dans plusieurs documents.

Cet un exemple simple en ce qui concerne une opération de traitement par lots pour l'écriture, la mise à jour et suppression.

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) { 
     // ... 
    } 
}); 

Appel de la méthode commit() sur l'objet lot signifie que vous vous engagez le lot entier.

+0

Merci pour la réponse rapide mais ma question est sur la façon d'effectuer une mise à jour en vrac sur tous les documents d'une collection. Cette réponse réitère ce qui est indiqué dans le lien vers les documents que j'ai fournis qui effectue des écritures individuelles à des documents individuels. –

+0

C'est très simple. Obtenir tous ces documents de la collection et en utilisant le modèle ci-dessus, mis à jour ces documents avec les données souhaitées. –

+0

Donc, afin d'augmenter le nombre de documents qui correspondent à une requête, vous devez lire chaque document en mémoire, puis écrire chaque en arrière? Avec MySQL vous avez été capable de [mettre à jour directement dans la base de données] (https://dev.mysql.com/doc/refman/8.0/fr/update.html) depuis 1995, [MongoDB supporte aussi les mises à jour multi-documents] (https://docs.mongodb.com/manual/reference/method/db.collection.update/#example-update-specific-fields) - mais Firestore ne le fait pas? Beaucoup de progrès, stupéfiez la base de données, très wow! –