web-dev-qa-db-de.com

So fügen Sie ein Dokument mit benutzerdefinierter ID zu firestore (Angular) hinzu

Gibt es eine Möglichkeit, der firestore-Sammlung ein Dokument mit einer benutzerdefinierten ID hinzuzufügen, nicht der von der Firestore-Engine generierten ID.

Vielen Dank im Voraus für Ihre Antworten.

15
Harvey Dent

Um eine benutzerdefinierte ID zu verwenden, müssen Sie .set anstelle von .add verwenden.

Dadurch wird ein Dokument mit der ID "LA" erstellt: 

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

Dies ist den offiziellen Dokumenten hier entnommen.

38
Finlay Percy
this.afs.collection('[your collection]').doc('[your ID]').set([your document]);
4
Papa Kojo

Um die akzeptierte Antwort zu erweitern, falls Sie jemals wollten, dass Ihr Client eine zufällige ID für das Dokument generiert, bevor Sie zu Firestore weiterleiten (unter der Annahme, dass dieselbe Funktion createId() außerhalb von AngularFire2 vorhanden ist)

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

Dies ist nützlich, um die ID als Referenzfeld in einem anderen Dokument festzulegen, noch bevor Firestore etwas speichert. Wenn Sie das gespeicherte Objekt nicht sofort verwenden müssen, wird der Vorgang dadurch beschleunigt, dass Sie nicht auf die ID warten müssen. Der set() -Aufruf ist jetzt asynchron zu der Pipe, die Sie möglicherweise in Angular verwenden

Beachten Sie, dass ich id: newId Nicht in das festgelegte Objekt eingefügt habe, da Firestore die ID standardmäßig nicht als Feld im Dokument speichert

3

Neues Dokument mit ID erstellen  

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

EX: in diesem Beispiel mit E-Mail als ID für das Dokument

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

db.collection ("Benutzer"). Dokument (mAuth.getUid ()). Set (Benutzer)

Hier ist der Name der Sammlung "users" und der Dokumentname ist die UID des Benutzers.

Hier müssen Sie set nicht add verwenden

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();
        }
    });
}
1
Deven Chavda