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?
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?
Antworten:
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
.add()
entspricht.doc().set()
this.afs.collection('[your collection]').doc('[your ID]').set([your document]);
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: newId
das festgelegte Objekt nicht eingefügt habe , da Firestore die ID standardmäßig nicht als Feld im Dokument speichert
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);
db.collection ("Benutzer"). document (mAuth.getUid ()). set (Benutzer)
Hier lautet der Name der Sammlung "users"
und der Dokumentname der des BenutzersUID
Hier musst du set
nicht 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();
}
});
}
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);
"LA"
? Das wird nicht funktionieren:.doc("LA").add({...})
Bitte sagen Sie, wie ich das machen kann.