Firestoreで複数のドキュメントを同時にset()したい

set multiple document ad once, in Firestore.

結論


const setMultipleDocument = async () => {
  const userList = ['userA', 'userB', 'userC', ]
  const db = firebase.firestore();
  const date = new Date();
  const currentTime = date.getTime();

  const batch = db.batch();
  // rooms has many users
  const userDocRef = db.collection("rooms").doc('DEFIND_ROOM_UUID').collection('users');

  await userList.map((userName) => {
    batch.set(userDocRef.doc(), {
      name: userName,
      createdAt: currentTime,
    })
  })
  await batch.commit();
}

概要

詳細

const setMultipleDocument = async () => {
  // userListを定義しておく
  const userList = ['userA', 'userB', 'userC', ]
  // dbという変数名が一般的ぽいのでこうしておく。ここはfirestoreの通常のset時と変わらない
  const db = firebase.firestore();
  // ここもただ単にcurrentTimeを取得しているだけ
  const date = new Date();
  const currentTime = date.getTime();

ここまでが前準備。

// 新しくbatchを取得するだけ
const batch = db.batch();
// 複数ドキュメントを作成したい親ドキュメントに対してrefを定義する。
const userDocRef = db.collection("rooms").doc('DEFIND_ROOM_UUID').collection('users');

// await つけつつ、Listをmapで一つずつ回して、batchにsetしていく
await userList.map((userName) => {
  batch.set(userDocRef.doc(), {
    name: userName,
    createdAt: currentTime,
  })
})
// この段階でbatchの中には追加(set)された値が入っている状態

// そして、ここでその値をcommitする
await batch.commit();