Como adicionar um documento com ID personalizado ao firestore

106

Existe alguma chance de adicionar um documento à coleção do firestore com id gerado personalizado, não o id gerado pelo mecanismo do firestore?

Harvey Dent
fonte

Respostas:

217

Para usar um ID personalizado, você precisa usar .set, em vez de.add

Isso cria um documento com o ID "LA":

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

Isto é retirado dos documentos oficiais aqui

Finlay Percy
fonte
1
E se eu quiser adicionar ao documento "LA"? Isso não vai funcionar: .doc("LA").add({...})diga como posso fazer isso.
Shubham Kushwah
3
.add()é equivalente a.doc().set()
roshnet 01 de
Se quisermos adicionar o id de custome, temos que usar .doc (). Set () em vez de add ()
Bilal Yaqoob
16
this.afs.collection('[your collection]').doc('[your ID]').set([your document]);
Papa Kojo
fonte
2
Alguma explicação seria útil aqui!
user3483203
7

Para expandir a resposta aceita, se você quiser que seu cliente gere um ID aleatório para o documento antes de enviar para o Firestore (presumindo que a mesma createId()função exista fora do AngularFire2)

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

Isso é útil para definir o ID como um campo de referência em outro documento, mesmo antes de o Firestore salvar qualquer coisa. Se você não precisar usar o objeto salvo imediatamente, isso acelera o processo, não fazendo com que você espere pelo ID. A set()chamada agora é assíncrona do tubo que você pode estar usando no Angular

Observe que não coloquei id: newIdno objeto set, porque o Firestore por padrão não salva o ID como um campo no documento

David Thong Nguyen
fonte
3

Você pode fazer assim

// 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 Brave
fonte
1

db.collection ("usuários"). document (mAuth.getUid ()). set (usuário)

Aqui, o nome da coleção é "users"e o nome do documento é o nome do usuárioUID

Aqui u precisa usar setnãoadd

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
fonte
1

Criar novo documento com ID

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

EX: este exemplo com leva e-mail como ID do documento

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