Replace With(変換ステージ)

説明

既存のドキュメント内のフィールドを、指定された式のフィールドに置き換えます。

式には、リテラルのマップまたは評価するとマップになる式を指定できます。指定された式がマップに評価されない場合、このステージはエラーを返します。

サポートされているモードは 3 つあります。

  • full_replace: ドキュメント全体を指定された式の結果に置き換えます。そこに現れないフィールドは省略されます。
  • merge_overwrite_existing: 式を既存のドキュメントと結合し、ドキュメント内のフィールド値を式内の値で上書きします。
  • merge_keep_existing: 式を既存のドキュメントと結合します。フィールド値は、ドキュメントに存在しない場合にのみ追加されます。

次のドキュメントを含む cities コレクションを作成します。

Node.js

await db.collection("cities").doc("SF").set({name: "San Francisco", population: 800000, location: {country: "USA", state: "California"}});
await db.collection("cities").doc("TO").set({name: "Toronto", population:  3000000, province: "ON", location: {country: "Canada", province: "Ontario"}});
await db.collection("cities").doc("NY").set({name: "New York", location: {country: "USA", state: "New York"}});
await db.collection("cities").cov("AT").set({name: "Atlantis", population: null});

full_replace モードを使用してドキュメントの変更されたバージョンを取得する

ネストされた location フィールドを抽出し、他のすべてのデータを破棄します。

Node.js
  const names = await db.pipeline()
    .collection("/cities")
    .replace_with(Field.of("location"), "full_replace")
    .execute();
    
Java
Pipeline.Snapshot names =
    firestore.pipeline().collection("cities").replaceWith(field("location")).execute().get();

次のドキュメントが生成されます。

{ country: "USA", state: "California" },
{ country: "Canada", province: "Ontario" },
{ country: "USA", state: "New York" },
{ }

merge_overwrite_existing モードを使用してフィールドを設定する

すべてのドキュメントの population フィールドを 0 に設定し、既存の 値を上書きします。

Node.js
  const censoredResults = await db.pipeline()
    .collection("/cities")
    .replace_with(map("population", 0), "merge_overwrite_existing")
    .execute();
    

次のドキュメントが生成されます。

{name: "San Francisco", population: 0, location: {country: "USA", state: "California"}},
{name: "Toronto", population: 0, province: "ON", location: {country: "Canada", province: "Ontario"}},
{name: "New York", population: 0, location: {country: "USA", state: "New York"}},
{name: "Atlantis", population: 0}

merge_keep_existing モードを使用してデフォルト値を追加する

location がドキュメントに表示されない場合に、そのデフォルト値を設定します。

Node.js
  const defaultedResults = await db.pipeline()
    .collection("/cities")
    .replace_with(map("location", "unknown"), "merge_keep_existing")
    .execute();
    

次のドキュメントが生成されます。

{ name: "San Francisco", population: 800000, location: { country: "USA", state: "California" } },
{ name: "Toronto", province: "ON", population: 3000000, location: { country: "Canada", province: "Ontario" } },
{ name: "New York", location: { country: "USA", state: "New York" } },
{ name: "Atlantis", population: null, location: "unknown" }