2017-11-26 13 views
1

Firestoreについてはどこでも、Realtime Firebaseよりも少ない非正規化が必要とされています。これは、特定のドキュメントを指し、その量のデータ(?)のみを取得できるドキュメントデータベースであるためです。Firestoreによるマルチパスアップデート

しかし、私は、非正規化が依然として有効である状況を管理する方法を考えています(たとえば、同じ値を他のドキュメントにも格納することによって、完全な情報データを含むドキュメントにクエリを保存できます)。その値の更新が必要な場合は、この問題を解決するためにRealtime Firebaseマルチパスアップデート(すべてのドキュメントの値を更新する)のようなものがありますか?

答えて

1

「ファイヤーストアはリアルタイムデータベースよりも非正規化を必要としています」(どちらもFirebaseのデータ保存担当)私はこの主張が必ずしも真実だとは思わないが、それはすべてあなたのデータのアーキテクチャに帰着するからです。 Firestoreはあなたにいくつかの良い方法に従うように強制しますが、それはあなたがリアルタイムデータベースで同様のアーキテクチャを得ることを意味するわけではありません。あなたはバッチを使用することができますDenormalisedデータ

を更新

は異なるパスに位置denormalisedデータを更新するを書き込みます。ただし、1つのバッチでエンティティを最大500個まで更新できます。

操作セット内のドキュメントを読む必要がない場合は、set()、update()、またはdelete()操作の組み合わせを含む単一のバッチとして複数の書き込み操作を実行できます。一連の書き込みは原子的に完了し、複数のドキュメントに書き込むことができます。 Firebase Firestore Documentation

// Get a new write batch 
var batch = db.batch(); 

// Set the value of 'NYC' 
var nycRef = db.collection("cities").doc("NYC"); 
batch.set(nycRef, {name: "New York City"}); 

// Update the population of 'SF' 
var sfRef = db.collection("cities").doc("SF"); 
batch.update(sfRef, {"population": 1000000}); 

// Delete the city 'LA' 
var laRef = db.collection("cities").doc("LA"); 
batch.delete(laRef); 

// Commit the batch 
batch.commit().then(function() { 
    // ... 
}); 

ノートから

例:は、それは明らかフォームのコードではないかもしれませんが、commitメソッドが呼び出されるまで、書き込みのいずれもがFirestore上で実行されません。

+0

ええ、私はRealtime Firebaseを意味しました。 –

+0

以前のドキュメントも読んでいますが、この例では複数のドキュメントの更新をどのように表示していますか? –

+0

この例では、都市のドキュメントSF、LAを更新していますが、ファイアストアに指示(何をする)を保存する前にコミットメソッドを呼び出すと、実際にfirebaseサーバに一斉に送信されます。 –

関連する問題