flutter - firestore:使用地图查询多个搜索词未按预期工作
问题描述
设想
我有一系列课程,我想根据用户输入的逗号分隔词搜索集合。但是,在执行查询时会返回所有课程集合。
Flutter 中的代码片段
Future<void> search(List<String> keywords) async {
var docs = coursesRef;
// BELOW I ITERATE OVER KEYWORDS CONVERT
// THEM TO LOWER CASE AND APPEND TERM TO MAP searchTerms
keywords.forEach((word) {
String term = word.trim().toLowerCase();
docs.where('searchTerms.$term', isEqualTo: true);
});
docs.where('isDraft', isEqualTo: false);
QuerySnapshot query = await docs.getDocuments();
courses = [];
query.documents.forEach((doc) {
Course course = Course.fromDoc(doc);
courses.add(course);
});
notifyListeners();
}
我的地图字段如下所示:
返回的搜索结果
所有当前课程集合如下所示:
{uid: 3riP6kUweNPF2EV7avD2, name: Chemistry, code: CHEM208, academy: American University of Beirut, academyCode: AUB, isDraft: false, keywords: [chem208, chem 208, chemistry]}
{uid: KyyTpfEbbG8FhJbKvsuo, name: Math, code: MATH204, academy: American University of Beirut, academyCode: AUB, isDraft: false, keywords: [math204, math 204, math]}
{uid: jTBaY0T2CHPUGKPg8tb8, name: Chemistry, code: CHEM200, academy: American University of Beirut, academyCode: AUB, isDraft: false, keywords: [chem200, chem 200, chemistry]}
{uid: vcdLCmrwN4RPKDt7CeUX, name: Accounting, code: ACC 213, academy: American University of Beirut, academyCode: AUB, isDraft: false, keywords: [accounting, acc213, acc 213]}
给定
关键字仅包含术语数学
解决方案
每次调用where(...)
它都会返回一个新Query
对象。因此,每次添加条件时都需要使用新查询更新变量:
var docs = coursesRef;
keywords.forEach((word) {
String term = word.trim().toLowerCase();
docs = docs.where('searchTerms.$term', isEqualTo: true);
});
docs = docs.where('isDraft', isEqualTo: false);
推荐阅读
- python - 无法执行使用 PyInstaller 构建的 python 脚本 (ModuleNotFoundError)
- java - 如何反序列化对象持久化类在类中具有较少的属性,而新类具有额外的属性
- java - HashSet vs TreeSet 不同的大小()
- azure - 在数据工厂中复制数据时过滤多个通配符文件名
- javascript - 为什么在`array.length && ...`的短路评估中呈现“0”
- pyspark - 从 PySpark DataFrame 中删除 na 行索引
- c# - 如何让我的窗口覆盖系统范围内所有打开的窗口?
- python - 将多列折叠(或组合)成两个单独的列python
- entity-framework - 动态过滤,无法动态获取属性名实体框架
- amazon-web-services - Ansible:将 Cloudwatch 日志事件触发器添加到 Lambda 函数