Firebase: сохранение идентификатора документа в самом документе при отправке в качестве карты

Итак, я ввожу пользовательский ввод в ФОРМУ.

например поля [_name, _category, documentID]

После отправки формы данные отправляются в Firebase в виде карты, подобной этой;

final dbRefItem = FirebaseFirestore.instance.collection("items");

 myMap = {
        "name": _name,
        "category": _category,
        "docReference":  //need doc ref here
      };

dbRefItem.add(myMap);

Теперь, когда эта карта отправляется в Firestore, ей присваивается случайный идентификатор: я хочу, чтобы этот случайный идентификатор был объединен в поле myMap at "docReference".

Я понимаю, что документ еще не создан, поэтому, возможно, нет способа его исправить. Но тогда, может быть, я смогу решить, какую ссылку я могу отправить myMap, чтобы я мог сохранить ее в самом поле.

Интеграция Angular - Firebase Analytics
Интеграция Angular - Firebase Analytics
Узнайте, как настроить Firebase Analytics и отслеживать поведение пользователей в вашем приложении Angular.
1
0
463
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

let id = 34234fdsf6hfgf //some random id
final dbRefItem = FirebaseFirestore.instance.collection("items").doc(id);  //your id here

 myMap = {
        "name": _name,
        "category": _category,
        "docReference":  id
      };

dbRefItem.set(myMap);

Он сохранит ваш документ с пользовательским идентификатором

  1. Чтобы сгенерировать собственный идентификатор, см. пакет uuid npm.

Добавление .doc() к ссылке на коллекцию делает ее самой ссылкой на документ, поэтому нельзя добавить к ней больше документов, не определив их в dbRefItem.set(myMap); Идентификатор должен быть предоставлен при нажатии каким-либо образом!

Firaun 11.12.2020 07:10
Ответ принят как подходящий

Случайные идентификаторы, назначенные Firestore, генерируются в клиентском приложении. Вы можете сгенерировать ссылку со случайным идентификатором, просто вызвав doc() без аргументов.

final docRef = FirebaseFirestore.instance.collection("items").doc();

Затем вы можете поместить id DocumentReference на карту:

myMap = {
    "name": _name,
    "category": _category,
    "docReference": docRef.id
};

Затем напишите документ, используя set():

docRef.set(myMap);

если вы добавите .doc() в docRef, тогда он станет ссылкой на документ, а не на коллекцию. И вы не можете добавить MAP в doc.ref, не указав идентификатор ссылки в операторе «docRef.set». Поэтому, когда я попробовал ваш метод, он говорит: «CollectionReference» не является подтипом типа «DocumentReference»».

Firaun 11.12.2020 07:06

Я не добавляю doc() в docRef. Я делаю новую ссылку и назначаю ее docRef. Этот код отлично компилируется для меня. Я предлагаю перепроверить то, что я сделал здесь. Это совсем другое, чем то, с чего вы начали.

Doug Stevenson 11.12.2020 07:12

Я проверил, не удалось. Холодная загрузка всего приложения, и теперь оно работает! Чертовски гениально! Большое спасибо!

Firaun 11.12.2020 07:20

вызвав функцию then() после добавления, вы можете получить идентификатор, потому что идентификатор был создан. вы можете получить доступ к идентификатору по значению и обновить созданный вами документ. введите здесь описание изображения

Другие вопросы по теме