#flutter #google-cloud-firestore
# #flutter #google-облако-firestore
Вопрос:
Я пытаюсь получить вновь созданный документ при публикации нового элемента в firestore.
Я знаю, что есть другие подобные вопросы, и я попробовал их! НО не получаю результат, на который я надеялся.
Итак, по сути, я set
набираю кучу данных, а затем делаю doc().id
внутри then
, и он возвращает идентификатор, которого нет в моем firestore, и он не соответствует ни одному из моих созданных документов.
код:
return _userRef.doc(_user.uid).collection(collName).doc().set({
'item_name': name,
'item_description': description,
'item_location':
GeoPoint(_locationData.latitude, _locationData.longitude),
'item_date': DateTime.now(),
'item_images': imageMap,
}).then((value) {
print('${_userRef.doc(_user.uid).collection(collName).doc().id}');
});
Я видел другой вопрос, где они это сделали :
var ref = _userRef
.doc(_user.uid)
.collection(collName)
.get()
.then((value) => print('hello ***** ${value.docs[0].id}'));
но это просто возвращает первый документ в списке документов! Я думал о загрузке одного массива перед set
, а затем загрузить 2-й массив после set
, а затем просто сравнить 2 массива и найти странного человека. НО это займет очень много времени, если у меня будет огромный список!
Есть мысли??
Ответ №1:
doc() без параметров создает DocumentReference со случайным идентификатором. Если вы хотите узнать этот идентификатор, он немедленно доступен в id
свойстве этого объекта. Вы можете получить к нему доступ сразу, не записывая ничего.
var ref = _userRef.doc(_user.uid).collection(collName).doc();
print(ref.id);
Идентификатор генерируется в клиентском приложении, поэтому он доступен сразу. Документ фактически не будет существовать, пока вы не вызовете set()
эту ссылку.
ref.set(...); // after success, the document will exist
Комментарии:
1. спасибо, но я хочу знать, как получить этот вновь созданный документ после набора. тем временем я загрузил массив перед набором, затем я загрузил второй массив после набора, так что теперь у before должен быть тот же список, что и у after, за исключением того, что в массиве after будет на 1 элемент больше, чем в другом, этот 1 элемент — мой недавно созданный документ. Я получил это для работы….
2. Вам нужно будет обычно обращаться к
get()
документу, используя ту же ссылку. Для этого нет ярлыка.set()
не вернет вам новое содержимое документа.
Ответ №2:
Вы можете использовать метод добавления для добавления новых документов в свою коллекцию.
Firestore.instance.collection(collName).add({
'item_name': name,
'item_description': description,
'item_location':
GeoPoint(_locationData.latitude, _locationData.longitude),
'item_date': DateTime.now(),
'item_images': imageMap,
});
Затем вы можете просмотреть документ, который вы добавили в свою коллекцию, и таким образом получить его идентификатор.
Комментарии:
1. как мне увидеть документ, который я добавил? Допустим, у меня есть 30 документов. Я добавляю еще один, как мне сказать моей программе, чтобы она извлекла этот конкретный недавно созданный документ?