Flutter & firebase:我怎么能做一个“只包含来自”的查询

Posted

技术标签:

【中文标题】Flutter & firebase:我怎么能做一个“只包含来自”的查询【英文标题】:Flutter & firesbase : how can i do a 'contains only from' query 【发布时间】:2021-06-19 00:32:25 【问题描述】:

我是 Flutter 的新手,我正在尝试构建一个以 Cloud Firestore 作为后端的应用程序。

我有一个显示在屏幕上的数据库中的项目列表,用户选择他想要的项目。

然后我想显示我拥有的所有列表并包含用户选择的列表中的项目。 (比如如果用户选择了 ['tree',''sky','flower','table'],并且在数据库中我有 ['tree','flower'] 和 ['tree',''sky' ,'flower','table'] 我想展示它们)。

我尝试使用 arrayContainsAny,但它也向我显示了包含其他项目的列表,例如 ['tree','sky','orange']。

有什么办法吗?

伊迪丝

如果用户列表选择为:['tree','orange','sky','flower']

在我的数据库中,我有这些数组: ['flower','sky'] , ['tree','orange','sky','flower'] 和 ['sky','orange','电脑']

那么我想要做的是只显示前 2 个数组(['flower','sky'] 和 ['tree','orange','sky','flower'])而不是最后一个因为“计算机”不在用户列表中

arrayContains 的问题在于它显示了 3 个列表,这不是我想要的。

谢谢

【问题讨论】:

您所描述的内容听起来像是arrayContainsAny 的用例。您能否编辑您的问题以显示您对该子句的尝试以及它返回的错误结果? @FrankvanPuffelen,arrayContainsAny 返回了我不想要的东西,我编辑了我的问题,所以你可以看到我使用它的例子。 【参考方案1】:

在 Firebase 返回您的结果之后。您可以确定这些项目存在于您的数据库中,当您取回它们时,即使它们有额外的项目,也要根据用户输入过滤这些项目。 这样,您就可以确保用户不会过滤不存在​​或您不提供的项目。在步骤 2 中,通过比较列表在本地执行第二个过滤器。它不会对您的应用造成大量消耗,并且可以同步运行。

【讨论】:

【参考方案2】:

试试这个方法。当您从 firestore 数组中获取所有项目时,然后将其分配给列表并在任何您想要的地方使用。

 List<String> myList = [];
   getdata() async
     await Firestore.instance.collection("points").document('biZV7cepFJA8T6FTcF08').get().then((value)
       setState(() 
         // first add the data to the Offset object
         List.from(value.data['point']).forEach((myitems)
           myList.add(myitems);
         );

       );
     );
   

【讨论】:

以上是关于Flutter & firebase:我怎么能做一个“只包含来自”的查询的主要内容,如果未能解决你的问题,请参考以下文章

Flutter & Firebase:如何检查某个项目是不是存在于 Firebase 文档中的数组中

Flutter & firebase - StreamBuilder 未加载

Flutter 2 - firebase_remote_config 0.6.0 & firebase_core ^0.7.0 版本冲突

Flutter & Firebase - 从文档中获取特定字段

检查用户是不是登录 Flutter & firebase auth |

从 QuerySnapshot 和 Listview Builder (Flutter & Firebase) 中排除文档