Есть ли возможность добавить документ в коллекцию firestore с настраиваемым идентификатором, а не идентификатором, созданным движком firestore.
Заранее благодарим за ваши ответы.
Есть ли возможность добавить документ в коллекцию firestore с настраиваемым идентификатором, а не идентификатором, созданным движком firestore.
Заранее благодарим за ваши ответы.
Чтобы использовать пользовательский идентификатор, вам нужно использовать .set
, а не .add
Это создает документ с идентификатором "LA":
db.collection("cities").doc("LA").set({
name: "Los Angeles",
state: "CA",
country: "USA"
})
Это взято из официальных документов здесь
this.afs.collection('[your collection]').doc('[your ID]').set([your document]);
db.collection( "пользователи"). документ (mAuth.getUid()). набор (пользователь)
Здесь имя коллекции - "users"
а имя документа - это UID
пользователя
Здесь вам нужно использовать set
not add
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();
}
});
}
Создать новый документ с идентификатором
createDocumentWithId<T>(ref: string, document: T, docId: string) {
return this.afs.collection(ref).doc<T>(docId).set(document);
}
Пример: этот пример с использованием электронной почты в качестве идентификатора для документа
this.fsService.createDocumentWithId('db/users', {}, credential.user.email);
Чтобы расширить принятый ответ, если вы когда-нибудь хотели, чтобы ваш клиент сгенерировал случайный идентификатор документа, прежде чем createId()
в Firestore (при условии, что та же createId()
существует вне AngularFire2)
const newId = db.createId();
db.collection("cities").doc(newId).set({
name: "Los Angeles",
state: "CA",
country: "USA"
})
Это полезно для установки идентификатора в качестве справочного поля в другом документе, даже до того, как Firestore сохранит что-либо. Если вам не нужно сразу использовать сохраненный объект, это ускоряет процесс, не заставляя вас ждать идентификатор. Вызов set()
теперь асинхронный из канала, который вы можете использовать в Angular
Обратите внимание, что я не поместил id: newId
в установленный объект, потому что Firestore по умолчанию не сохраняет ID как поле в документе