首页 > 解决方案 > Firestore如何将数据保存在子集合中

问题描述

我有一个集合users,每个用户都有自己的文档。现在我想创建一个子集合来存储与特定用户相关的更多数据。

到目前为止,我的代码如下所示:

class DatabaseService {

  Future isUserRegistered(String uid) async{
    return await FirebaseFirestore.instance.collection('users')
        .where('uid', isEqualTo: uid)
        .get();
  }

  Future registerNewUser(email, password, uid) async{
    return await FirebaseFirestore.instance.collection('users')
        .doc(uid).set(
      {
        "email": email,
        "password": password,
        "uid": uid,
        "token": -1,
        "userGoal": false,
        "userGender": false,
      },
    );
  }

  Future saveToRemote() async{
    Map<String, dynamic> data = UserManager.userdata;
    return await FirebaseFirestore.instance.collection('users')
        .doc(data['uid'])
        .set(data);
  }

class UserManager {
  static Map<String, dynamic> userdata = null;
}

如何将数据存储在子集合中?

编辑我创建了一个新的保存功能,但不是将数据存储在具有当前 uid 的文档的子集合中,而是创建了一个名为“uid”的新文档。如何解决?

  Future saveInSubcollectionToRemote() async{
    Map<String, dynamic> data = UserManager.userWeights;
    return await FirebaseFirestore.instance.collection('users')
        .doc('uid')
        .collection('weights')
        .doc(data['userWeight'])
        .set(data);
  }

标签: flutterdartgoogle-cloud-firestore

解决方案


保存到子集合与保存到顶级集合没有什么不同。您构建CollectionReference用户文档下的路径并add像这样调用:

FirebaseFirestore.instance
  .collection('users').doc(uid)
  .collection('subcollection').add(
      {
        "field": value,
      },
    );

推荐阅读