Jak dodać dokument z niestandardowym identyfikatorem do Firestore

107

Czy jest szansa na dodanie dokumentu do kolekcji Firestore z niestandardowym identyfikatorem wygenerowanym, a nie wygenerowanym przez silnik Firestore?

Harvey Dent
źródło

Odpowiedzi:

218

Aby użyć niestandardowego identyfikatora, musisz użyć .setzamiast.add

Spowoduje to utworzenie dokumentu o identyfikatorze „LA”:

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

To pochodzi z oficjalnych dokumentów tutaj

Finlay Percy
źródło
1
A co jeśli chcę dodać do dokumentu "LA"? To nie zadziała: .doc("LA").add({...})powiedz, jak mam to zrobić.
Shubham Kushwah
3
.add()jest odpowiednikiem.doc().set()
roshnet
Jeśli chcemy dodać identyfikator klienta, musimy użyć .doc (). Set () zamiast add ()
Bilal Yaqoob
16
this.afs.collection('[your collection]').doc('[your ID]').set([your document]);
Papa Kojo
źródło
2
Przydałoby się tutaj pewne wyjaśnienie!
user3483203
7

Aby rozwinąć zaakceptowaną odpowiedź, jeśli kiedykolwiek chciałeś, aby Twój klient wygenerował losowy identyfikator dla dokumentu przed wysłaniem do Firestore (zakładając, że ta sama createId()funkcja istnieje poza AngularFire2)

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

Jest to przydatne do ustawiania identyfikatora jako pola odniesienia w innym dokumencie, nawet zanim Firestore cokolwiek zapisze. Jeśli nie musisz od razu używać zapisanego obiektu, przyspiesza to proces, nie zmuszając Cię do czekania na identyfikator. set()Połączenie jest teraz asynchroniczny z rury może być używanie w kątowym

Zauważ, że nie wstawiłem id: newIdobiektu set, ponieważ domyślnie Firestore nie zapisuje ID jako pola w dokumencie

David Thong Nguyen
źródło
3

Możesz to zrobić w ten sposób

// 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
źródło
1

db.collection ("użytkownicy"). dokument (mAuth.getUid ()). set (użytkownik)

Tutaj nazwa kolekcji to, "users"a nazwa dokumentu to użytkownikUID

Tu u trzeba używać setnieadd

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
źródło
1

Utwórz nowy dokument z identyfikatorem

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

EX: ten przykład z e-mailem jako identyfikatorem dokumentu

this.fsService.createDocumentWithId('db/users', {}, credential.user.email);
siła słońca
źródło