firebase 如何在firestore文档中存储文档ID而不出错?

eqqqjvef  于 2022-11-25  发布在  其他
关注(0)|答案(1)|浏览(238)

我知道这个问题已经被问过很多次了,但是我的问题有点不同。我试图将firestore文档ID存储在文档本身中。每当我试图保存它时,都会出现一个错误,说
如果您的数据包中包含一个引用,请单击"链接"。失败的Assert:第116行位置14:'路径.不为空':文档路径必须是非空字符串)。
我知道我应该在''之间放一个空格,但当我这样做时,firestore文档的文档ID为空。

这是在firestore中创建组的代码

Future<String?> addCollection(
    Username, groupName, location, postText, groupID, password) async {
  String id = FirebaseFirestore.instance.collection('groups').doc(groupID).id;
  CollectionReference collection =
      FirebaseFirestore.instance.collection('groups');

  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setString('groupID', groupID.toString());

  var result = await collection.doc(id).set({
    'groupName': groupName,
    'groupChatId': id,
    'creator': Username,
    'testmember': [],
    'location': location,
    'password': password
  });
  print(id);
  await subcollection(id: id, postText: postText, Username: Username);
  return 'Created';
}

Future<String?> subcollection(
    {id, required Username, required postText}) async {
  CollectionReference collection =
      FirebaseFirestore.instance.collection('groups');
  collection.doc(id).collection('posts').add({
    'postText': postText,
    'createdBy': Username,
    'createdAt': Timestamp.now()
  });
  return 'Created';
}
ycggw6v2

ycggw6v21#

我试图将firestore文档ID存储在文档本身中。
Firestore有一个特定的方法,可以在提交doc()之前获取自动生成的ID。基本上,您可以使用自动生成的ID创建一个对文档的引用,然后在传递数据时使用它。在您的示例中:

final db = Firebase.firestore;

final newGroupRef = db.collection("groups").doc(); // Auto-Generated ID reference

final data = {
    'groupName': groupName,
    'groupChatId': newGroupRef.id, // get the id from from the refrence here 
    'creator': Username,
    'testmember': [],
    'location': location,
    'password': password
  };

newGroupRef.set(data);

在后台,.add(...)和.doc().set(...)是完全等效的,因此您可以使用哪个更方便。
此处提供更多信息
另请注意,假设您希望subCollection()在addCollection()之后运行,则应该使用带有try catch的then()或使用Transactions/Batch writes,因为您最不希望subCollection()在addCollection()之前运行。

相关问题