查询我的子集合的第一个文档的数据
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]
最好留给,嗯,当你需要使用变量来引用字段名时。
我需要获取子集合的第一个文档(仅)的数据。
我试过第一个解决方案:
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]
最好留给,嗯,当你需要使用变量来引用字段名时。