颤动多个Firestore查询

时间:2018-09-05 11:24:00

标签: firebase dart flutter google-cloud-firestore

我正在尝试对Firestore进行多个查询,并将结果合并到here之类的一个流中。我尝试使用StreamGroup.merge(),但它只返回一个流的结果。我注意到它确实获取了所有流的数据,但仅在所有内容完成后才返回一个。这是我所做的:

Stream getStream(){
    List<Stream> streams = [];     

    streams.add(Firestore.instance.collection(Constants.REQUESTS_NODE).
    where("municipality",isEqualTo: "City of Johannesburg Metropolitan").
    where("service_id",isEqualTo: 2).
    snapshots());
    streams.add(Firestore.instance.collection(Constants.REQUESTS_NODE).
    where("municipality",isEqualTo: "Lesedi Local").where("service_id",isEqualTo: 2).
    snapshots());    

    return StreamGroup.merge(streams);

  }

我缺少什么并且做错了什么?我这样做的原因是为了弥补Firestore缺少OR运算符。

3 个答案:

答案 0 :(得分:4)

您可以使用whereIn条件,它是List<dynamic>,对我有用!

例如:

Firestore db = Firestore.instance;
db.collection
.where("status", whereIn: ["available", "unavailable", "busy"])
.getDocuments();

答案 1 :(得分:2)

对于将来可能需要帮助的任何人,我设法使用StreamZip来解决。您可以从此website

了解更多信息

答案 2 :(得分:2)

我在网上找到了此邮件,希望对您有所帮助

`import 'package:async/async.dart';

Stream<DocumentSnapshot> stream1 = firestore.document('/path1').snapshots();
Stream<DocumentSnapshot> stream2 = firestore.document('/path2').snapshots();
StreamZip bothStreams = StreamZip([stream1, stream2]);

// To use stream
bothStreams.listen((snaps) {
 DocumentSnapshot snapshot1 = snaps[0];
 DocumentSnapshot snapshot2 = snaps[1];

 // ...
});`