从Flutter应用程序在文档中创建子集合

时间:2019-01-14 05:38:22

标签: firebase dart flutter google-cloud-firestore

我正在尝试在文档中创建子集合,并将数据设置为创建的子集合中的文档。

我已经尝试过了,但是每次运行此程序都会崩溃。

  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<…>

与设备的连接丢失。

4 个答案:

答案 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{()}

此处的主要区别在于,路径名称中的正斜杠已被删除。