So fügen Sie dem Firestore ein Dokument mit einer benutzerdefinierten ID hinzu

96

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

Harvey Dent
quelle

Antworten:

200

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

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

Finlay Percy
quelle
1
Was ist, wenn ich dem Dokument hinzufügen möchte "LA"? Das wird nicht funktionieren: .doc("LA").add({...})Bitte sagen Sie, wie ich das machen kann.
Shubham Kushwah
2
.add()entspricht.doc().set()
roshnet
16
this.afs.collection('[your collection]').doc('[your ID]').set([your document]);
Papa Kojo
quelle
2
Eine Erklärung wäre hier hilfreich!
user3483203
7

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 createId()wechseln (vorausgesetzt, dieselbe Funktion existiert außerhalb von AngularFire2).

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, beschleunigt dies den Vorgang, da Sie nicht auf die ID warten müssen. Der set()Aufruf ist jetzt asynchron von der Pipe, die Sie möglicherweise in Angular verwenden

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

David Thong Nguyen
quelle
2

Sie können es so machen

// 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
quelle
1

db.collection ("Benutzer"). document (mAuth.getUid ()). set (Benutzer)

Hier lautet der Name der Sammlung "users"und der Dokumentname der des BenutzersUID

Hier musst du setnicht verwendenadd

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

Erstellen Sie ein neues Dokument mit ID

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

EX: In diesem Beispiel wird E-Mail als ID für das Dokument verwendet

this.fsService.createDocumentWithId('db/users', {}, credential.user.email);
Sonnenstärke
quelle