首页 > 解决方案 > 查询我的子集合的第一个文档的数据

问题描述

我需要获取我的子集合的第一个文档(仅)的数据。

我已经尝试过第一个解决方案:

void _getOwner(accommodation) async {

    await FirebaseFirestore.instance
        .collection('Users')
        .doc(uid)
        .collection('Accommodation')
        .doc(accommodation.id)
        .collection('Owner')
        .limit(1)
        .get()
        .then((value){
          print(value.data());
        });
  }

但我有这个错误信息:

没有为“QuerySnapshot”类定义方法“data”。

  • 'QuerySnapshot' 来自'package:cloud_firestore/cloud_firestore.dart' ('../../../.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.15.0/lib/cloud_firestore.dart' )。尝试将名称更正为现有方法的名称,或定义名为“数据”的方法。打印(值。数据());

然后我尝试了这个解决方案:

  void _getOwner(accommodation) async {

    await FirebaseFirestore.instance
        .collection('Users')
        .doc(uid)
        .collection('Accommodation')
        .doc(accommodation.id)
        .collection('Owner')
        .get()
        .then((QuerySnapshot querySnapshot) => {
          querySnapshot.docs.forEach((doc) {
            print(doc["LastName"]);
          })
    });
  }

它有效,但我需要我的第一个所有者文档的姓氏,而不是“forEach”......我该怎么办?

标签: fluttergoogle-cloud-firestoredocument

解决方案


在你的部分:

.then((QuerySnapshot querySnapshot) => {
          querySnapshot.docs.forEach((doc) {
            print(doc["LastName"]);
          })
    });

querysnapshot.docs 是一个 QueryDocumentSnapshots 数组(不是最终文档),可以作为一个数组来寻址。我警告说,“第一”的概念在 Firestore 中是一个棘手的概念——您应该定义自己的顺序,并.orderBy()在代码中使用 an;否则它将按 documentID 的顺序排列,出于性能原因,我希望它是一个伪随机代码。假设它实际上是您描述的任何顺序的“第一个”,您可以这样做:

.then((QuerySnapshot querySnapshot) => {
        print(querySnapshot.docs[0].data.LastName);
    });

作为一般规则,对于固定的已知字段名称,使用点 (.) 表示法更好;doc[variable]当您需要使用变量来引用字段名时,最好保留数组表示法。


推荐阅读