Après l'authentification, j'essaie de rechercher un document utilisateur dans/users /, puis je souhaite mettre à jour le document avec les données de l'objet auth ainsi que certaines propriétés utilisateur personnalisées. Mais je reçois un message d'erreur indiquant que la méthode de mise à jour n'existe pas. Est-il possible de mettre à jour un seul document? Tous les exemples de documents Firestore supposent que vous avez l'identifiant de document réel et qu'aucun exemple ne demande d'interrogation avec une clause where.
firebase.firestore().collection("users").where("uid", "==", payload.uid)
.get()
.then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
console.log(doc.id, " => ", doc.data());
doc.update({foo: "bar"})
});
})
Vous pouvez construire une référence de document à partir du doc.id
:
var db = firebase.firestore();
db.collection("users").where("uid", "==", payload.uid)
.get()
.then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
console.log(doc.id, " => ", doc.data());
// Build doc ref from doc.id
db.collection("users").doc(doc.id).update({foo: "bar"});
});
})
Vérifiez si l'utilisateur est déjà là alors simplement .update
, ou .set
si non:
var docRef = firebase.firestore().collection("users").doc(firebase.auth().currentUser.uid);
var o = {};
docRef.get().then(function(thisDoc) {
if (thisDoc.exists) {
//user is already there, write only last login
o.lastLoginDate = Date.now();
docRef.update(o);
}
else {
//new user
o.displayName = firebase.auth().currentUser.displayName;
o.accountCreatedDate = Date.now();
o.lastLoginDate = Date.now();
// Send it
docRef.set(o);
}
toast("Welcome " + firebase.auth().currentUser.displayName);
});
}).catch(function(error) {
toast(error.message);
});