Czy jest szansa na dodanie dokumentu do kolekcji Firestore z niestandardowym identyfikatorem wygenerowanym, a nie wygenerowanym przez silnik Firestore?
Czy jest szansa na dodanie dokumentu do kolekcji Firestore z niestandardowym identyfikatorem wygenerowanym, a nie wygenerowanym przez silnik Firestore?
Odpowiedzi:
Aby użyć niestandardowego identyfikatora, musisz użyć .set
zamiast.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
.add()
jest odpowiednikiem.doc().set()
this.afs.collection('[your collection]').doc('[your ID]').set([your document]);
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: newId
obiektu set, ponieważ domyślnie Firestore nie zapisuje ID jako pola w dokumencie
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);
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ć set
nieadd
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();
}
});
}
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);
"LA"
? To nie zadziała:.doc("LA").add({...})
powiedz, jak mam to zrobić.