#flutter #dart
#flutter #dart
Вопрос:
Мне нужно обновить одно значение в Firestore. Я проверил несколько страниц, не могу найти простого решения. Я бы предпочел избегать использования FirebaseUser.uid.
Вот как добавляется коллекция:
Map<String, String> userDataMap = {
"userName": usernameEditingController.text,
"userEmail": emailEditingController.text,
"account": userType,
"deleted": "false",
};
databaseMethods.addUserInfo(userDataMap);
Firestore.instance.collection("users").add(userData).catchError((e) {
print(e.toString());
});
Я хочу найти пользователя с его электронной почтой, и я складываю это:
Firestore.instance
.collection('users')
.where('email', isEqualTo: email)
Заранее благодарю
Ответ №1:
Я предполагаю, что у вас будет только 1 отдельный пользователь с определенным email
. Итак, вы можете использовать первый документ в качестве данных:
final querySnapshot = await FirebaseFirestore.instance
.collection('users')
.where('email', isEqualTo: email)
.get();
if (querySnapshot.docs != null amp;amp; querySnapshot.docs.isNotEmpty) {
final doc = querySnapshot.docs[0];
await FirebaseFirestore.instance
.collection('users')
.doc(doc.id)
.set(userDataMap);
}
Но это не очень хороший подход, поскольку мы выполняем много вычислений как в Firebase, так и в нашем приложении. По этой причине мы должны установить какое id
-то значение в документе для упрощения доступа или операций обновления.
Если бы вы использовали user.uid
в качестве идентификатора документа, весь процесс стал бы таким простым, как показано ниже:
await FirebaseFirestore.instance.collection('users').doc(user.uid).set(userDataMap);
Нам не нужно извлекать список DocumentSnapshot
и перебирать его и обновлять на основе этого документа id
.
Комментарии:
1. Как я могу сохранить данные в документе с именем user.uid? И как я могу получить этот идентификатор позже?
2. Или, пожалуйста, просто объясните мне, как с помощью документа с именем с идентификатором пользователя (второй вариант) изменить только одно значение — «удалено» с «false» на «true»
3. Вам нужно будет создать
Map<String, dynamic>
и изменить его значение. Например, допустим, у вас есть полеdeleted
, затем, чтобы обновить его значение, вы можете вызвать метод:await FirebaseFirestore.instance.collection('users').doc(user.uid).update({'deleted': true});