flutter 如何添加OR条件以触发Firebase查询

nqwrtyyt  于 2023-03-31  发布在  Flutter
关注(0)|答案(2)|浏览(141)

我试图添加一个OR条件到我的flutter firebase查询。
下面是我的代码,但我想检查receiver_name等于kimsender_name等于kim的位置

StreamBuilder( 
  stream: Firestore.instance.collection("payments").where("receiver_name", isEqualTo: userActive).snapshots(),
  builder: (context, snapshot){
 

  return Container ( child:ListView.builder(
      shrinkWrap: true,
    itemCount: snapshot.data.documents.length,
    padding: EdgeInsets.all(0),
    controller: ScrollController(keepScrollOffset: false),
    itemBuilder: (context, index){

      DocumentSnapshot documentSnapshot = snapshot.data.documents[index];
bd1hkmkf

bd1hkmkf1#

正如@ChristopherMoore评论的那样,Firestore不可能在多个字段上使用OR条件。执行单独的查询并在客户端合并它们是最常见的解决方法。有关此方面的更多信息,请参阅:

不将您的问题标记为这些问题的重复的原因是指出使用单个查询实现相同结果的另一种方法。

为每个文档添加参与者数组

如果向文档添加数组字段participants,其中包含发送方和接收方的UID字段,则可以使用array-contains查询获取用户为发送方或接收方的所有付款。
要向这样的数组添加UID,请确保使用array-union运算符:

documentRef.updateData({"participants": FieldValue.arrayUnion("uidOfUser")});

然后要查询它,您可以用途:

collectionRef.where('participants', arrayContains: "uidOfUser")
2admgd59

2admgd592#

Firebase现在提供OR运算符。

它现在可以通过使用Filter.or来实现。请点击此链接了解更多详细信息:或运算符
您需要Cloud Firestore版本24.4.5
在Flutter中需要cloud_firestore: ^4.5.0
要查询它,您必须像这样编写:

Firestore.instance.collection("payments")
        .where(Filter.or(
            Filter("receiver_name", isEqualTo: "kim"),
            Filter("sender_name", isEqualTo: "kim")
               )).snapshots();

相关问题