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

Ответы (9)

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

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

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

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

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

Если вы хотите добавить пользовательский идентификатор, не созданный в хранилище, просто сделайте следующее:

значение u: String = FirebaseAuth.getInstance (). CurrentUser? .Uid.toString () FirebaseFirestore.getInstance (). Collection («Подробная информация о магазине»). Document (u) .set (data)

// вас нет в firestore, он сначала создаст и добавит данные // данные - это все, что вы хотите добавить в firestore

Так можно сделать

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

Если вы используете angularfire,

class Component{
  constructor(private afs: AngularFireStore) {} // imported from @angular/fire/firestore

  addItem() {
    this.afs.collection('[your collection]').doc('[your ID]').set({your: "document"});
  }
}

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

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

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

this.fsService.createDocumentWithId('db/users', {}, credential.user.email);

db.collection («пользователи»). Document (mAuth.getUid ()). Set (пользователь)

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

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

private void storeData(String name, String email, String phone) {

    // Create a new user with a first and last name
    Map 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() {
        @Override
        public void onSuccess(Void aVoid) {
            Toasty.success(context,"Register sucess",Toast.LENGTH_SHORT).show();
        }
    });
}

Это функция, которая создает документ с данными, и вы можете выбрать, хотите ли вы сгенерировать идентификатор самостоятельно или автоматически. Если во время вызова функции указан идентификатор, то документ, который будет создан, будет иметь указанный вами идентификатор.

Модульное хранилище Firebase 9. +

import { getFirestore, serverTimestamp, collection, doc, setDoc, addDoc } from 'firebase/firestore/lite'
async create(id = null, data) {
    const collectionRef = collection(getFirestore(), this.collectionPath)

    const dataToCreate = {
      ...data,
      createTimestamp: serverTimestamp(),
      updateTimestamp: serverTimestamp()
    }

    const createPromise =
      id === null || id === undefined
        ? // Create doc with generated id
          await addDoc(collectionRef, dataToCreate).then(d => d.id)
        : // Create doc with custom id
          await setDoc(doc(collectionRef, id), dataToCreate).then(() => id)

    const docId = await createPromise

    return {
      id: docId,
      ...data,
      createTimestamp: new Date(),
      updateTimestamp: new Date()
    }
  }

Та же функция для немодульного хранилища Firebase (<версия 9)

import { firebase } from '@firebase/app'
async create(data, id = null) {
    const collectionRef = (await firestore()).collection(this.collectionPath)
    const serverTimestamp = firebase.firestore.FieldValue.serverTimestamp()

    const dataToCreate = {
      ...data,
      createTimestamp: serverTimestamp,
      updateTimestamp: serverTimestamp
    }

    const createPromise =
      id === null || id === undefined
        ? // Create doc with generated id
          collectionRef.add(dataToCreate).then(doc => doc.id)
        : // Create doc with custom id
          collectionRef
            .doc(id)
            .set(dataToCreate)
            .then(() => id)

    const docId = await createPromise

    return {
      id: docId,
      ...data,
      createTimestamp: new Date(),
      updateTimestamp: new Date()
    }
  }

Код, который дается первым, предназначен для JavaScript. Это для Android Studio (JAVA)

Map city = new HashMap<>();
city.put("name", "Los Angeles");
city.put("state", "CA");
city.put("country", "USA");
//Here LA is Document name for Assigning
db.collection("cities").document("LA")
    .set(city)
    .addOnSuccessListener(new OnSuccessListener() {
        @Override
        public void onSuccess(Void aVoid) {
            Log.d(TAG, "DocumentSnapshot successfully written!");
        }
    })
    .addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Log.w(TAG, "Error writing document", e);
        }
    });

Чтобы установить идентификатор при добавлении данных, вы должны использовать Установить Метод

Если этот код устарел, найдите новый код Здесь

2022 WebDevInsider