flutter Firestore -如何保存数据?

sirbozc5  于 2022-11-17  发布在  Flutter
关注(0)|答案(2)|浏览(170)

这听起来可能很愚蠢,但我很困惑。你应该如何将数据保存到Firestore?
在添加和检索之前,是否应该将其转换为JSON或从JSON转换而来?或者是否应该将其保存为Map,例如:

({'sugars': sugars, 'name': name, 'strength': strength})

实时数据库是否有所不同?
我看到人们在他们的模型类中添加了以下内容:

final FieldModel field;
  final int number;
  final String id;

  TransactionModel({
    required this.field,
    required this.number,
    this.id = '',
  });

  /// this conversion to JSON
  factory TransactionModel.fromJson(String id, Map<String, dynamic> json) =>
      TransactionModel(
        field: FieldModel.fromJson(json['field']['id'], json['field']),
        id: id,
        number: json['number'],
      );

我的问题是:为什么他们把它转换成JSON?它总是被要求的吗?这是用于Firestore还是实时数据库?

8iwquhpp

8iwquhpp1#

您可以在Cloud Firestore here中找到有关获取和存储数据的所有详细信息。
Firestore将数据存储在“文档”中,而“文档”又包含在“集合”中。文档也可以包含嵌套集合。例如,我们的每个用户都有自己的“文档”存储在“Users”集合中。集合方法允许我们在代码中引用集合。
要向Firestore添加条目,您需要将Map<String, dynamic>传递给集合add()函数或文档set()函数。
您可以这样发送数据。

await FirebaseFirestore.instance.collection('users').add({
    'full_name': fullName, // John Doe
    'company': company, // Stokes and Sons
    'age': age // 42
  });

或者,您也可以执行以下操作:

await FirebaseFirestore.instance.collection('users').add(
    userModel.toJson(),
  );

其中,toJson()

Map<String, dynamic> toJson() => {
  "full_name": fullName,
  "company": company,
  "age": age,
};

若要读取集合或文档一次,请调用Query.get或DocumentReference.get方法。

class GetUserName extends StatelessWidget {
  final String documentId;

  GetUserName(this.documentId);

  @override
  Widget build(BuildContext context) {
    CollectionReference users = FirebaseFirestore.instance.collection('users');

    return FutureBuilder<DocumentSnapshot>(
      future: users.doc(documentId).get(),
      builder:
          (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
        if (snapshot.hasError) {
          return Text("Something went wrong");
        }

        if (snapshot.hasData && !snapshot.data!.exists) {
          return Text("Document does not exist");
        }

        if (snapshot.connectionState == ConnectionState.done) {
          Map<String, dynamic> data =
              snapshot.data!.data() as Map<String, dynamic>;
          return Text("Full Name: ${data['full_name']} ${data['last_name']}");
        }

        return Text("loading");
      },
    );
  }
}

至于回答你的问题:
我的问题是:为什么他们把它转换成json?它总是被要求的吗?这是用于Firestore还是实时数据库?
JSON(JavaScript Object Notation,JavaScript对象表示法)是一种用于数据交换的轻量级格式。它基于JavaScript语言的一个子集(对象是内置JavaScript的方式)。正如MDN中所述,有些JavaScript不是JSON,有些JSON也不是JavaScript。
在“旧”时代,Web服务使用XML作为其传输数据的主要数据格式,但自从JSON出现(JSON格式由道格拉斯Crockford在RFC 4627中指定)以来,它一直是首选格式,因为它更轻量级
您可以参考this答案了解有关JSON的更多信息。
总之,JSON或Maps被用于数据传输,因为它以一种结构良好的方式(键-值对)提供数据。与其他数据传输格式(如CSV)相比,它更容易阅读。

bgibtngc

bgibtngc2#

将数据写入Firestore有几种方法:

  • 设定集合内文件的数据,明确指定文件识别项。
  • 向集合中添加新文档。在这种情况下,Firestore会自动生成文档标识符。
  • 使用自动生成的标识符创建一个空文档,并在以后为其分配数据。

若要建立或覆写单一文件,请使用set()方法:

import { doc, setDoc } from "firebase/firestore"; 

// Add a new document in collection "cities"
await setDoc(doc(db, "cities", "LA"), {
 name: "Los Angeles",
 state: "CA",
 country: "USA"
});

如果文档不存在,则将创建该文档。如果文档存在,则其内容将被新提供的数据覆盖,除非您指定数据应合并到现有文档中,如下所示:

import { doc, setDoc } from "firebase/firestore"; 

const cityRef = doc(db, 'cities', 'BJ');
setDoc(cityRef, { capital: true }, { merge: true });

如果不确定文档是否存在,请传递选项以将新数据与任何现有文档合并,以避免覆盖整个文档。对于包含Map的文档,请注意,指定包含空Map的字段的集合将覆盖目标文档的Map字段。
如需了解更多信息,请浏览此
JSON是JavaScript Object Notation的缩写,是一种开放的标准格式,它是轻量级的,基于文本的,明确地为人类可读的数据交换而设计。它是一种与语言无关的数据格式。它支持几乎所有类型的语言、框架和库。
JSON是一个在网络上交换数据的开放标准。它支持对象和数组等数据结构。因此,从JSON中写入和读取数据非常容易。
在JSON中,数据以键-值对的形式表示,大括号中包含对象,每个名称后面跟一个冒号。逗号用于分隔键-值对。方括号用于包含数组,其中每个值用逗号分隔。
你可以通过这个链接JSON
最后,正如@eNeM所说,JSON或Maps被用于数据传输,因为它以一种结构良好的方式(键-值对)提供数据。

相关问题