Dalon
Dalon

Reputation: 700

Firestore how to save data in a subcollection

I have a collection users where every user has his own document. Now I want to create a subcollection to store more data related to a specific user.

So far my Code looks like this:

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

How can I store data in a subcollection?

EDIT I created a new save function but instead of storing data in a subcollection in the document with the current uid, firestore creates a new document named 'uid'. How to fix that?

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

Upvotes: 2

Views: 658

Answers (1)

Frank van Puffelen
Frank van Puffelen

Reputation: 598740

Saving to a subcollection is no different from saving to a top-level collection. You build a path to the CollectionReference under the user's document and call add like this:

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

Upvotes: 3

Related Questions