👤

firestoreにuidを入れる時はsetを使おう

2021/07/06に公開

firestoreにuidいれた時にちょっとひっかかったのでメモ。

結論

  • uid は add のオブジェクトでなく set 時の doc に指定すると、 get する時に楽

詳細

where().get() と doc().get() の大きな違いは『返却が複数か単数か』

  • uid === document id の場合は、下記のように doc().get() が利用できる
db.collection("users").doc("testUserUid").get().then((doc) => {
    if (doc.exists) {
        console.log(doc.data().name);
    } else {
        console.log("データが見つかりませんでした");
    }
})
  • uid !== collection id で、 uid がコレクションの一部のなっている場合は where を使えばデータの取得はできる
  • 取得はできるが、 PKEY っぽいもので取得した時の処理として気持ち悪い…。
db.collection("users").where('uid', '==', testUserUid).get().then((querySnapshot) => {
  querySnapshot.forEach((doc) => {
    if (doc.exists) {
        console.log(doc.data().name);
    } else {
        console.log("データが見つかりませんでした");
    }
  })
})

uid を document id にするにはsetすればいい

db.collection("users").doc("testUserUid").set({
    name: "user taro"
})
  • 参考までに、今回の失敗例
db.collection("users").add({
    uid: "testUserId",
    name: "user taro"
})

おわりに

  • uid は set がおすすめ!
  • id 以外の unique 制限を持つ場合や複合キーとかある場合は firestore 不向きかも?

参考文献

Discussion