我们可以在添加数据之前在实时数据库中推送键,但在cloud firestore中,我找不到任何方法来在添加数据之前找到唯一的键
String uniqueKey = ref.push().getKey();
所以我做了两个操作添加,然后更新。如果我能在添加数据到firestore之前获得唯一键,我可以做一个操作,只是添加包含在文档中的唯一键。
目前我正在这样做。
集合引用
final sitesRef = FirebaseFirestore.instance
.collection('book_mark')
.doc(getUserId())
.collection("link")
.withConverter<SiteModel>(
fromFirestore: (snapshots, _) => SiteModel.fromJson(snapshots.data()!),
toFirestore: (siteModel, _) => siteModel.toJson(),
);
添加文档,然后从响应获取文档Id,然后用文档Id更新文档。所以如果更新操作失败了,我就不能再访问文档了。所以它会在这一行产生一个问题.
Future<String> addSiteFireStore(SiteModel siteModel) async {
try {
DocumentReference<SiteModel> response = await sitesRef.add(siteModel);
final Map<String, dynamic> data = <String, dynamic>{};
data['docId'] = response.id;
sitesRef.doc(response.id).update(data);
_logger.fine("Link added successfully");
return "Link added successfully";
} on Exception catch (_) {
_logger.shout("Could not add link.Please try again");
return "Could not add link.Please try again";
}
}
有没有办法提前得到文档Id ?提前谢谢。
您可以通过在CollectionReference
上调用doc()
(不带参数)来获取新的文档引用,而无需写入它。然后,您可以从新的文档引用中获得id
属性,类似于在新的RTDB引用中调用getKey()
的方式。
:
final newRef = FirebaseFirestore.instance
.collection('book_mark')
.doc();
final newId = newRef.id;
请参阅CollectionReference.doc()
上的FlutterFire文档。