Как обновить это в Firestore?

#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});