如何通过flutter搜索我的firestore数据库中的多个字段

问题描述 投票:0回答:2

我正在尝试构建一个搜索功能,其中在搜索字段中输入的文本将通过 Firestore 中的两个字段(个人资料名称和用户名)进行搜索。例如,如果用户的个人资料名称为“Sylvester Appiah”,用户名为“keeett”。然后,当搜索用户名或配置文件名称时,它应该返回相同的用户。我不确定是否可以在 .where() 方法中执行 profileName 或 username 操作。如有任何帮助,我们将不胜感激!

controlSearch(String searchWord){
 Future<QuerySnapshot>pUsers=usersReference 
  .where("profileName",isGreaterThanOrEqualTo:searchWord)          
  .getDocuments();
   setState(() {
      futureSearchResult = pUsers;

    });
  }
firebase flutter search google-cloud-firestore
2个回答
4
投票

您无法将多个条件传递给

where()
。相反,您可以多次调用
where()
,将它们链接在一起形成您需要的查询:

usersReference
  .where("profileName",isGreaterThanOrEqualTo: searchWord)
  .where("username",isEqualTo: "QeustionableCoder")
  .getDocuments();

请注意,您可能需要为此类多字段查询定义索引。如果您缺少索引,SDK 将记录有关该索引的错误消息。查找该错误消息中的 URL,因为这是在正确字段上定义索引的最快方法。


0
投票

我在名称

search keywords
下向每个文档添加了一个新字段作为列表字段,并放置了我想要搜索的字段。

示例:

await FirebaseFirestore.instance.collection('your collection').doc().set({
'name' : 'Faris',
'age' : 25,
'country' : 'Iraq',
'search keywords' : [
  'Faris',
  25,
  'Iraq',
],

});

当我想搜索时,我将使用

search keywords
字段键。

Stream<QuerySnapshot> get searchFilteredData {
return FirebaseFirestore.instance
    .collection('your collection')
    .where('search keywords',  arrayContains: searchFilter)
    .snapshots()
    .handleError((error) => print(error.toString()));

}

然后,您可以使用

StreamBuilder
来搜索并获取数据。

此方法的缺点之一是您必须键入准确的值才能获取所需的数据,仅写入部分值是不够的。

我从这个YouTube视频

学到了这个方法
© www.soinside.com 2019 - 2024. All rights reserved.