Как добавить документ с пользовательским идентификатором в firestore (Angular)

Есть ли возможность добавить документ в коллекцию firestore с настраиваемым идентификатором, а не идентификатором, созданным движком firestore.

Заранее благодарим за ваши ответы.

Ответы

Ответ 1

Чтобы использовать пользовательский идентификатор, вам нужно использовать .set, а не .add

Это создает документ с идентификатором "LA":

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

Это взято из официальных документов здесь

Ответ 2

this.afs.collection('[your collection]').doc('[your ID]').set([your document]);

Ответ 3

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

Ответ 4

Создать новый документ с идентификатором

  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);

Ответ 5

Чтобы расширить принятый ответ, если вы когда-нибудь хотели, чтобы ваш клиент сгенерировал случайный идентификатор документа, прежде чем 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 как поле в документе