我正在尝试在文档中创建子集合,并将数据设置为创建的子集合中的文档。
我已经尝试过了,但是每次运行此程序都会崩溃。
await Firestore.instance
.collection('/path')
.document("documentPath")
.collection('/subCollectionPath')
.document()
.setData({
'TestData': "Data",
}).then((onValue) {
print('Created it in sub collection');
}).catchError((e) {
print('======Error======== ' + e);
});
我也在网上看过,但找不到任何文档。
有什么想法吗?
当我尝试上述代码时,应用程序崩溃并显示以下消息
flutter: EVENT StorageTaskEventType.success
*** First throw call stack:
(
0 CoreFoundation 0x0000000111eb61bb __exceptionPreprocess + 331
1 libobjc.A.dylib 0x0000000111454735 objc_exception_throw + 48
2 Runner 0x000000010ce707b1 -[FIRFirestore documentWithPath:] + 257
3 Runner 0x000000010d10662c getDocumentReference + 124
4 Runner 0x000000010d109879 -[FLTCloudFirestorePlugin handleMethodCall:result:] + 2665
5 Flutter 0x000000010e5b99a2 __45-[FlutterMethodChannel setMethodCallHandler:]_block_invoke + 115
6 Flutter 0x000000010e5d6616 _ZNK5shell21PlatformMessageRouter21HandlePlatformMessageEN3fml6RefPtrIN5blink15PlatformMessageEEE + 166
7<…>
与设备的连接丢失。
答案 0 :(得分:4)
final databaseReference = Firestore.instance;
databaseReference.collection('main collection name').document( unique id).collection('string name').document().setData(); // your answer missing **.document()** before setData
这是正确的Syntex
答案 1 :(得分:2)
如果您要在Firestore交易中创建子集合,请使用以下解决方案:
Firestore.instance.runTransaction((Transaction tx) {
tx.set(Firestore.instance.collection('path').document('documentPath')
.collection('subCollectionPath').document(), {'TestData', 'Data'});
})
注意:您不能创建一个空的子集合,您必须使用至少一个文档创建该子集合。如果您尝试在数据字段为空的情况下创建子集合,则Firestore将创建一个空文档。
答案 2 :(得分:1)
要获取子集合数据,请使用此查询
var query = await databaseReference.collection('Staffs').document("horlaz229@gmail.com"). collection('Wallet').getDocuments()
答案 3 :(得分:0)
找出问题所在。我使用了错误的语法。正确的语法是
Firestore.instance.collection('path').document("documentPath").collection('subCollectionPath').setData{()}
此处的主要区别在于,路径名称中的正斜杠已被删除。