Flutter 如何为每个现有文档添加一个新字段,只需单击一次即可获得颤振应用程序

Flutter 如何为每个现有文档添加一个新字段,只需单击一次即可获得颤振应用程序,flutter,google-cloud-firestore,Flutter,Google Cloud Firestore,我正在开发一个flatter应用程序,在这里我使用streambuilder获取cloudfirestore,效果很好。我还实现了一个管理应用程序来创建更多列表数据。问题是我目前正在添加文档字段标题、图像、地址、描述等,但现在我想添加更多字段,如位置\ url。要添加该字段,我必须转到firebase控制台并手动添加文档字段,这非常痛苦,因为我已经创建了100多个文档。如果我没有将location\u url字段添加到现有文档中,那么客户端应用程序将显示错误。因此,有人请告诉我如何在每个现有文档

我正在开发一个flatter应用程序,在这里我使用streambuilder获取cloudfirestore,效果很好。我还实现了一个管理应用程序来创建更多列表数据。问题是我目前正在添加文档字段标题、图像、地址、描述等,但现在我想添加更多字段,如位置\ url。要添加该字段,我必须转到firebase控制台并手动添加文档字段,这非常痛苦,因为我已经创建了100多个文档。如果我没有将location\u url字段添加到现有文档中,那么客户端应用程序将显示错误。因此,有人请告诉我如何在每个现有文档中添加一个新字段,只需单击一下。

我理解你的意思,我也遇到过同样的情况

看,当您向cloud firestore添加一组字段时,cloud firestore会自动生成一个id,并在该文档或id中构造您已添加的字段。不可能像您所说的那样自动添加另一个字段,因为您必须为firebase提供文档id才能知道在何处添加该字段

不幸的是,您无法实现所需的功能。唯一的解决方案是手动添加缺少的字段


或者你可以在客户端应用程序中使用硬编码值来避免问题,但我认为这对你没有任何帮助。

我理解你的意思,我也遇到过同样的情况

看,当您向cloud firestore添加一组字段时,cloud firestore会自动生成一个id,并在该文档或id中构造您已添加的字段。不可能像您所说的那样自动添加另一个字段,因为您必须为firebase提供文档id才能知道在何处添加该字段

不幸的是,您无法实现所需的功能。唯一的解决方案是手动添加缺少的字段


或者您可以在客户端应用程序中使用硬编码值来避免此问题,但我认为这对您没有任何帮助。

在使用NoSQL数据库时,向数据模型添加新字段、文档或集合是很常见的。因此,必须处理旧模式的现有数据也是一个常见问题

在这些情况下,您拥有的是更改前的数据模型/模式,以及更改后的数据模型/模式。您必须确保您的应用程序能够处理这些更改,也称为模式迁移

有两种常见的方法:

  • 确保客户端代码可以处理缺少新数据的情况
  • 更新现有数据以符合新架构
  • 这两种方法都不是唯一比另一种更好的方法,事实上,您经常会同时使用这两种方法

    更新现有数据以符合新模式有时称为回填数据,尤其是(正如您在这里所做的)在新模式中添加更多数据时

    我通常会在我的应用程序中,或者在我为此编写的Node.js小脚本中,为这种回填操作编写一个快速助手函数。如果我在应用程序本身中编写代码,我永远不会将其发送给我的用户:代码只在那里供我运行一两次,然后我再次删除它

    一般/另外,最好确保客户端代码能够处理缺少新数据的情况,因为在无模式数据库中,遇到不符合模式的数据更为常见


    例如,在这种情况下,当您第一次从文档中读取新字段时,您可以轻松地为代码中的新字段设置默认值:
    var value=document['location\u url']??'默认值“

    在使用NoSQL数据库时,向数据模型添加新字段、文档或集合非常常见。因此,必须处理旧模式的现有数据也是一个常见问题

    在这些情况下,您拥有的是更改前的数据模型/模式,以及更改后的数据模型/模式。您必须确保您的应用程序能够处理这些更改,也称为模式迁移

    有两种常见的方法:

  • 确保客户端代码可以处理缺少新数据的情况
  • 更新现有数据以符合新架构
  • 这两种方法都不是唯一比另一种更好的方法,事实上,您经常会同时使用这两种方法

    更新现有数据以符合新模式有时称为回填数据,尤其是(正如您在这里所做的)在新模式中添加更多数据时

    我通常会在我的应用程序中,或者在我为此编写的Node.js小脚本中,为这种回填操作编写一个快速助手函数。如果我在应用程序本身中编写代码,我永远不会将其发送给我的用户:代码只在那里供我运行一两次,然后我再次删除它

    一般/另外,最好确保客户端代码能够处理缺少新数据的情况,因为在无模式数据库中,遇到不符合模式的数据更为常见


    例如,在这种情况下,当您第一次从文档中读取新字段时,您可以轻松地为代码中的新字段设置默认值:
    var value=document['location\u url']??'默认值“

    我创建了一个python脚本cli,用于使用单个命令向集合的所有文档添加一个新字段

    这是回购协议


    我创建了一个python脚本cli,用于使用单个命令向集合的所有文档添加一个新字段

    这是回购协议


    我处理这种情况的方法是使用转换器。Firebase为您提供了在Firebase本身之间转换数据的能力。给我看看信息
    final universities = snapshot.data.documents[index];
                        final String name = universities["name"];
                        final String address = universities["address"];
                        final String govtprivat = universities["govtprivat"];
                        final String url = universities["url"];
                        final String location_url = universities["location_url"];
    
    title: Text(name==null? 'Name':name,
                                      style: TextStyle(
                                          fontSize: 18,
                                          fontWeight: FontWeight.bold),
                                      maxLines: 1,
                                    ),
                                    subtitle: Text(
                                      address==null? 'Address not available':address,
                                      style: TextStyle(fontSize: 16),
                                      maxLines: 1,
                                    ),