web-dev-qa-db-fra.com

Firebase - Firestore - Récupère la clé avec collection.add ()

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.

11
Wandrille

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"}
    })
})
30
Doug Stevenson

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();
8
Diego Venâncio

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;
  }
1

SDK Javascript de Firebase:

Utilisez simplement .id pour obtenir la clé, voici un exemple utilisant async/await:

  const KEYID = async() => (await fs.collection("testing").add({ data: 'test'})).id;
0
Hamed Baatour