首页 > 解决方案 > 我可以在 Firestore 搜索中过滤多个字段吗?

问题描述

我在我的应用程序中使用 Firestore 数据库。
现在,是否可以在多个字段中搜索特定单词?

例如:想象一个像“芝士蛋糕”这样的词。现在,我收集了 100 个文档,每个文档有 10 个不同的字段。
我可以过滤所有字段的单词,以便它返回任何在 Flutter中的任何字段中包含单词“cheesecake”的文档吗?

标签: firebasedartfluttergoogle-cloud-firestore

解决方案


,你不能这样做
查看有关查询的 Firebase Firestore 文档页面,您会发现以下内容:

Cloud Firestore 不支持以下类型的查询:

这并不直接适用于您的特定用例,但您的请求不起作用的原因是相似的:没有允许您根据多个不同字段进行排序的索引。
例如,您可以创建对每个字段进行排序的索引,但只能单独查询它们。要了解为什么不支持某些查询,您可以查看 Firebase 团队的深入解释视频

最后,这意味着您将需要在客户端进行过滤。

Flutter 中的解决方法概念

final QuerySnapshot querySnapshot = 
  await Firestore.instance.collection('cakes').getDocuments();
final List<DocumentSnapshot> documents = 
  querySnapshot.documents.where((snapshot) => snapshot.data.containsValue('cheesecake'));
// now the [documents] object will only contain documents, which have "cheesecake" as any of their fields

推荐阅读