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

# #firebase #flutter #google-cloud-firestore

Вопрос:

Мы можем получить ключ в базе данных в реальном времени перед добавлением данных, но в облачном магазине firestore я не смог найти никакого способа найти уникальный ключ перед добавлением данных.

 String uniqueKey = ref.push().getKey();
 

Поэтому я выполняю две операции добавления, а затем обновления .Если я смогу получить уникальный ключ перед добавлением данных в firestore, я смогу выполнить одну операцию, просто добавив уникальный ключ, включенный в документ.

В настоящее время я делаю вот так.

Ссылка на коллекцию

 final sitesRef = FirebaseFirestore.instance
      .collection('book_mark')
      .doc(getUserId())
      .collection("link")
      .withConverter<SiteModel>(
        fromFirestore: (snapshots, _) => SiteModel.fromJson(snapshots.data()!),
        toFirestore: (siteModel, _) => siteModel.toJson(),
      );
 

Добавьте документ, затем получите идентификатор документа из ответа, а затем обновите документ с помощью документа Id.So если операция обновления каким-то образом не удалась, я больше не смогу получить доступ к документу. Так что это создаст проблему в будущем.

 Future<String> addSiteFireStore(SiteModel siteModel) async {
    try {
      DocumentReference<SiteModel> response = await sitesRef.add(siteModel);
      final Map<String, dynamic> data = <String, dynamic>{};
      data['docId'] = response.id;
      sitesRef.doc(response.id).update(data);
      _logger.fine("Link added successfully");
      return "Link added successfully";
    } on Exception catch (_) {
      _logger.shout("Could not add link.Please try again");
      return "Could not add link.Please try again";
    }
  }
 

Есть ли какой-нибудь способ получить удостоверение личности заранее?
Заранее спасибо.

Ответ №1:

Вы можете получить ссылку на новый документ без записи, позвонив doc() (без аргументов) по a CollectionReference . Затем вы можете получить id свойство из новой ссылки на документ, аналогично тому, как вы вызываете getKey() новую ссылку RTDB.

Так:

 final newRef = FirebaseFirestore.instance
      .collection('book_mark')
      .doc();
final newId = newRef.id;
 

Также смотрите документацию по FlutterFire на CollectionReference.doc() .