Firestore 是 Google Firebase 提供的一种 NoSQL 数据库,用于存储和同步数据。它支持嵌套集合(nested collections),即在一个集合中的文档可以包含另一个集合。
要在 Firestore 中首次添加嵌套集合,你需要先创建一个文档,然后在该文档中添加一个子集合。以下是一个示例代码:
import 'package:cloud_firestore/cloud_firestore.dart';
void addNestedCollection() async {
// 初始化 Firestore 实例
FirebaseFirestore firestore = FirebaseFirestore.instance;
// 创建一个文档
DocumentReference parentDocRef = await firestore.collection('parentCollection').add({
'name': 'Parent Document',
});
// 在父文档中添加嵌套集合
CollectionReference childCollectionRef = parentDocRef.collection('childCollection');
await childCollectionRef.add({
'name': 'Child Document',
});
print('Nested collection added successfully!');
}
要在 Firestore 中更新集合中的文档并添加字段,可以使用 update
方法。以下是一个示例代码:
void updateDocument() async {
// 初始化 Firestore 实例
FirebaseFirestore firestore = FirebaseFirestore.instance;
// 获取父文档的引用
DocumentReference parentDocRef = firestore.collection('parentCollection').doc('parentId');
// 更新父文档并添加新字段
await parentDocRef.update({
'newField': 'New Value',
});
print('Document updated successfully!');
}
嵌套集合在以下场景中非常有用:
原因:可能是权限问题或初始化问题。
解决方法:
// 确保 Firestore 实例已正确初始化
FirebaseFirestore firestore = FirebaseFirestore.instance;
// 检查 Firestore 安全规则
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
原因:可能是文档不存在或权限问题。
解决方法:
// 确保文档存在
DocumentSnapshot snapshot = await parentDocRef.get();
if (snapshot.exists()) {
await parentDocRef.update({
'newField': 'New Value',
});
} else {
print('Document does not exist!');
}
希望这些信息对你有所帮助!
领取专属 10元无门槛券
手把手带您无忧上云