flutter - 查询我的子集合的第一个文档的数据
问题描述
我需要获取我的子集合的第一个文档(仅)的数据。
我已经尝试过第一个解决方案:
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”......我该怎么办?
解决方案
在你的部分:
.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]
当您需要使用变量来引用字段名时,最好保留数组表示法。
推荐阅读
- json - 为什么 Unmarshal 使用嵌套结构会失败?
- clang - Clang AST Libtooling:如何在 AST 匹配上打印数组标识符
- high-availability - HA 配置问题,ActiveMQ Artemis
- javascript - 如何在 javascript 中获取此值?
- sql - T-SQL 获取数据库中每一行的第 5 个单词
- entity-framework - 包括返回所有记录的导航属性,而不仅仅是添加的属性
- c# - 来自 web api 的 Flutter VideoPlayerController 网络请求
- r - 动态图在 Shiny R 中没有正确显示?
- apache-spark - 如何删除 pyspark 中的模棱两可的列?
- html - Bootstrap 4.5,分离滚动条,让 Div 贴在底部