Cómo agregar un documento con identificación personalizada a firestore

96

¿Existe la posibilidad de agregar un documento a la colección de firestore con una identificación generada de manera personalizada, no la identificación generada por el motor de firestore?

Harvey Dent
fuente

Respuestas:

200

Para usar una identificación personalizada, debe usar .set, en lugar de.add

Esto crea un documento con el ID "LA":

db.collection("cities").doc("LA").set({
    name: "Los Angeles",
    state: "CA",
    country: "USA"
})

Esto está tomado de los documentos oficiales aquí.

Finlay Percy
fuente
1
¿Qué pasa si quiero agregar al documento "LA"? Esto no funcionará: por .doc("LA").add({...})favor, diga cómo puedo hacer eso.
Shubham Kushwah
2
.add()es equivalente a.doc().set()
roshnet
16
this.afs.collection('[your collection]').doc('[your ID]').set([your document]);
Papa Kojo
fuente
2
¡Alguna explicación sería útil aquí!
user3483203
7

Para ampliar la respuesta aceptada, si alguna vez quiso que su cliente generara una ID aleatoria para el documento antes createId()de enviarlo a Firestore (asumiendo que la misma función existe fuera de AngularFire2)

const newId = db.createId();
db.collection("cities").doc(newId).set({
    name: "Los Angeles",
    state: "CA",
    country: "USA"
})

Esto es útil para configurar el ID como un campo de referencia en otro documento, incluso antes de que Firestore guarde algo. Si no necesita usar el objeto guardado de inmediato, esto acelera el proceso al no hacerle esperar la identificación. La set()llamada ahora es asincrónica desde la tubería que podría estar usando en Angular

Observe que no puse id: newIdel objeto establecido, porque Firestore de forma predeterminada no guarda la ID como un campo en el documento.

David Thong Nguyen
fuente
2

Puedes hacerlo de esta manera

// Inject AngularFirestore as dependency 
private angularFireStore: AngularFirestore // from from 'angularfire2/firestore'

// set user object to be added into the document
let user = {
  id: this.angularFireStore.createId(),
  name: 'new user'
  ...
}

// Then, finally add the created object to the firebase document
angularFireStore.collection('users').doc(user.id).set(user);
Jonel Dominic Valiente
fuente
1

db.collection ("usuarios"). document (mAuth.getUid ()). set (usuario)

Aquí, el nombre de la colección es "users"y el nombre del documento es el del usuario.UID

Aquí necesitas usar setnoadd

private void storeData(String name, String email, String phone) {

    // Create a new user with a first and last name
    Map<String, Object> user = new HashMap<>();
    user.put("name", name);
    user.put("email", email);
    user.put("phone", phone);

    // Add a new document with a generated ID
    db.collection("users").document(mAuth.getUid()).set(user)
            .addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
            Toasty.success(context,"Register sucess",Toast.LENGTH_SHORT).show();
        }
    });
}
Deven
fuente
1

Crear nuevo documento con identificación

  createDocumentWithId<T>(ref: string, document: T, docId: string) {
    return this.afs.collection(ref).doc<T>(docId).set(document);
  }

EX: este ejemplo toma el correo electrónico como ID para el documento

this.fsService.createDocumentWithId('db/users', {}, credential.user.email);
sol sreng
fuente