¿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?
¿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?
Respuestas:
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í.
.add()
es equivalente a.doc().set()
this.afs.collection('[your collection]').doc('[your ID]').set([your document]);
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: newId
el objeto establecido, porque Firestore de forma predeterminada no guarda la ID como un campo en el documento.
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);
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 set
noadd
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();
}
});
}
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);
"LA"
? Esto no funcionará: por.doc("LA").add({...})
favor, diga cómo puedo hacer eso.