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

96

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

Харви Дент
источник

Ответы:

200

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

Будет создан документ с идентификатором «LA»:

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

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

Финли Перси
источник
1
Что, если я хочу добавить что-то в документ "LA"? Это не сработает: .doc("LA").add({...})скажите, пожалуйста, как я могу это сделать.
Shubham Kushwah
2
.add()эквивалентно.doc().set()
roshnet
16
this.afs.collection('[your collection]').doc('[your ID]').set([your document]);
Папа Коджо
источник
2
Некоторое объяснение здесь было бы полезно!
user3483203
7

Чтобы расширить принятый ответ, если вы когда-либо хотели, чтобы ваш клиент генерировал случайный идентификатор для документа перед отправкой в ​​Firestore (при условии, что такая же createId()функция существует за пределами AngularFire2)

const newId = db.createId();
db.collection("cities").doc(newId).set({
    name: "Los Angeles",
    state: "CA",
    country: "USA"
})

Это полезно для установки идентификатора в качестве справочного поля в другом документе, даже до того, как Firestore что-либо сохранит. Если вам не нужно сразу использовать сохраненный объект, это ускоряет процесс, не заставляя вас ждать идентификатора. set()Вызов теперь асинхронно из трубы можно использовать в угловому

Обратите внимание, что я не вставил id: newIdзаданный объект, потому что Firestore по умолчанию не сохраняет идентификатор как поле в документе.

Дэвид Тонг Нгуен
источник
2

Вы можете сделать это так

// 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);
Джонел Доминик Брэйв
источник
1

db.collection ("пользователи"). document (mAuth.getUid ()). set (пользователь)

Здесь имя коллекции, "users"а имя документа - пользовательUID

Здесь вам нужно использовать setnotadd

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();
        }
    });
}
Девен
источник
1

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

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

EX: этот пример с использованием электронной почты в качестве идентификатора документа

this.fsService.createDocumentWithId('db/users', {}, credential.user.email);
солнце sreng
источник