Je suis confronté à un problème avec le nouveau Firestore de Firebase.
Situation: J'ai un collection('room')
Je crée une pièce avec collection('room').add(room)
Ce que j'essaie de faire: Je dois mettre à jour une pièce.
Pour cela, j'utilise: collection('room').doc(ROOM_ID).update(update)
J'ai donc besoin d'ajouter ROOM_ID dans le document de ma collection:
|room
ROOM_ID
id:ROOM_ID,
someContent: ForTheQuery
Y a-t-il un moyen possible d'y parvenir?
Une alternative consiste à créer moi-même un identifiant généré avec:
collection('room')
.doc(someId)
.set({
id: someId,
someContent: ForTheQuery
});
mais je veux l'éviter.
Vous pouvez utiliser doc () pour créer une référence à un document avec un identifiant unique, mais le document ne sera pas encore créé. Vous pouvez ensuite définir le contenu de ce document en utilisant l'identifiant unique fourni dans la référence du document:
const ref = store.collection('users').doc()
console.log(ref.id) // prints the unique id
ref.set({id: ref.id}) // sets the contents of the doc using the id
.then(() => { // fetch the doc again and show its data
ref.get().then(doc => {
console.log(doc.data()) // prints {id: "the unique id"}
})
})
ANGULARFIRE:
obtenir l'identifiant avant d'ajouter la base de données:
var idBefore = afs.createId();
console.log(idBefore );
Android FIRESTORE:
String idBefore = db.collection("YourCol").document().getId();
Vous pouvez obtenir l'ID du document créé en utilisant collection.ref.add (votre élément sans ID) et la réponse (res) contiendra la nouvelle référence de document créée avec l'ID qu'il contient. Donc, obtenez l'ID en faisant simplement res.id.
createOne(options: { item: any, ref: AngularFirestoreCollection<any> }) {
const promise = new Promise((resolve, reject) => {
if (options.item) {
// Convert object to pure javascript
const item = Object.assign({}, options.item);
console.log('dataService: createOne: set item: ', item);
options.ref.ref.add(item)
.then((res) => {
console.log('dataService: createOne success: res: ', res);
resolve(res);
}).catch(err => {
console.error('dataService: createOne: error: ', err);
reject(err);
});
} else {
console.log('dataService: createOne: wrong options! options: ', options);
reject();
}
})
return promise;
}
Utilisez simplement .id
pour obtenir la clé, voici un exemple utilisant async
/await
:
const KEYID = async() => (await fs.collection("testing").add({ data: 'test'})).id;