查询我的子集合的第一个文档的数据

Query data of the first document of my sub collection

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

我试过第一个解决方案:

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());
        });
  }

但是我有这个错误信息:

The method 'data' isn't defined for the class 'QuerySnapshot'.

  • 'QuerySnapshot' is from 'package:cloud_firestore/cloud_firestore.dart' ('../../../.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.15.0/lib/cloud_firestore.dart'). Try correcting the name to the name of an existing method, or defining a method named 'data'. print(value.data());

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

  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”...我该怎么办?

在你的部分:

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

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

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

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