【问题标题】:Creating Sub-Collection in Document from Flutter app从 Flutter 应用程序在 Document 中创建子集合
【发布时间】:2019-06-08 03:06:46
【问题描述】:

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

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

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

与设备的连接丢失。

【问题讨论】:

  • 试试 - Firestore.instance .collection('/path') .document("documentPath") .collection('/subCollectionPath').reference() .document() .setData({ 'TestData': "Data", }).then((onValue) { print('Created it in sub collection'); }).catchError((e) { print('======Error======== ' + e); });
  • 那行不通。同样的事情也发生了。应用崩溃了。
  • 我编辑了问题以添加消息。见上面的问题。

标签: firebase dart flutter google-cloud-firestore


【解决方案1】:

如果您想在 Firestore 事务中创建子集合,以下是解决方案:

Firestore.instance.runTransaction((Transaction tx) {
    tx.set(Firestore.instance.collection('path').document('documentPath')
        .collection('subCollectionPath').document(), {'TestData', 'Data'});
})

注意:您不能创建空子集合,您必须创建至少包含一个文档的子集合。如果您尝试创建数据字段为空的子集合,Firestore 将创建一个空文档。

【讨论】:

    【解决方案2】:

    找出问题所在。我使用了错误的语法。正确的语法是

        Firestore.instance.collection('path').document("documentPath").collection('subCollectionPath').setData({});
    

    这里的主要区别是路径名称中的正斜杠已被删除。

    【讨论】:

      【解决方案3】:

      要获取子集合数据,请使用此查询

      var query  = await databaseReference.collection('Staffs').document("horlaz229@gmail.com"). collection('Wallet').getDocuments()
      

      【讨论】:

        【解决方案4】:
         final databaseReference = Firestore.instance;
        databaseReference.collection('main collection name').document( unique id).collection('string name').document().setData(); // your answer missing **.document()**  before setData
        

        这是正确的语法

        【讨论】:

        • 您能告诉我在上述结构中存储数据后如何检索数据吗?谢谢。
        猜你喜欢
        • 2020-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-19
        • 1970-01-01
        • 2018-07-03
        • 2020-12-26
        • 2020-02-03
        相关资源
        最近更新 更多