我有一个列表,其中包含特定集合"users"的文档ID,我想获得仅存在于该列表中的文档,并且这些文档在前面提到的"user"集合中。
代码:
getUsers() async
{
double radius = 0.3;
String field = "GeoPosition";
print(currentUser.point.longitude);
GeoFirePoint center = geo.point(latitude: currentUser.point.latitude, longitude: currentUser.point.longitude);
var collectionRef = Firestore.instance.collection('user_locations').document(currentUser.pincode) .collection('Users_complete_address_and_geopoint');
this.stream = geo.collection(collectionRef: collectionRef).within(center: center, radius: radius, field: field, strictMode: false);
Future<List<certainrangeusers>> users1 = stream.first.then(
(documents) => documents.map((doc) => certainrangeusers(
id: doc['userPhone'],
)
).toList());
users1.then((val) async{
QuerySnapshot snapshot = await Firestore.instance.collection('users').where('id', isEqualTo: val.first.id).getDocuments();
List<User> users = snapshot.documents.map((doc) => User.fromDocument(doc)).toList();
setState(() {
this.users = users;
});
});
}
Firebase结构:点击此处查看火球结构
图像格式代码:
点击此处查看图像
- 在橙色框中,"users1"是一个具有文档ID的列表。。。用户数10km用户
- 在粉红色的框中,我们使用列表的值
- 在绿色框中,我们需要传递上面列表中的文档ID
p.s:我使用"val.first.id"只是为了将文档放在列表的第一位。。。。。。。。但我需要带上清单上的所有文件。。。所以这就是我要强调的一点。。。
这里介绍如何从列表id 中搜索所有文档
而不是:
await Firestore.instance.collection('users').where('id', isEqualTo:
val.first.id).getDocuments();
使用这个:
await Firestore.instance.collection('users').where('id', whereIn:
val).getDocuments();
由于您有一个certainchangeuser
的列表,请执行此操作以获取ID。
users1.then((val){
// Get the ids
List ids = [];
for (var value in val){
ids.add(value.id);
}
//Then
QuerySnapshot = await
Firestore.instance.collection('users').where('id',
whereIn:ids).getDocuments();
....
});
您可以将事务用于此目的。Firestore交易