👤
firestoreにuidを入れる時はsetを使おう
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すればいい
- 公式の1番上のサンプルに従おう
db.collection("users").doc("testUserUid").set({
name: "user taro"
})
- 参考までに、今回の失敗例
db.collection("users").add({
uid: "testUserId",
name: "user taro"
})
おわりに
- uid は set がおすすめ!
- id 以外の unique 制限を持つ場合や複合キーとかある場合は firestore 不向きかも?
Discussion