gpt4 book ai didi

javascript - Firebase Firestore - 使用多个 'array-contains' 过滤数据

转载 作者:行者123 更新时间:2023-12-04 01:10:35 27 4
gpt4 key购买 nike

我正在努力寻找有关使用 firebase firestore 过滤数据的最佳实践的好 Material 。我想根据用户选择的类别过滤我的数据。我有一个存储在我的 firestore 数据库中的文档集合,每个文档都有一个数组,其中包含该单个文档的所有适当类别。为了过滤,我还保留了一个包含用户首选类别的本地数组。我要做的就是根据用户的首选类别过滤数据。

firestore categories field

考虑我将用户的首选类别存储为字符串数组( ["Film", "Music"] )。我计划使用 firestore 的 'array-contains' 方法,例如

db.collection(collectioname)
.where('categoriesArray', 'array-contains', ["Film", "Music"])


后来我发现我不能对数组本身使用'array-contains',在调查了这个问题之后,我决定改变我提到的数据结构 here。 .

categories changed to Map

一旦我将类别从数组更改为映射,我想我可以使用多个 where 条件来过滤文档
let query = db.collection(collectionName)
.where(somefield, '==', true)

this.props.data.filterCategories.forEach((val) => {
query = query.where(`categories.${val}`, '==', true);
});

query = query
.orderBy(someOtherField, "desc")
.limit(itemsPerPage)

const snapshot = await query.get()


现在问题 2,firebase 需要为复合查询添加索引。我在每个文档中保存的类别是动态的,我无法提前添加这些索引。在这种情况下,理想的解决方案是什么?任何帮助将不胜感激。

最佳答案

这是 2019 年 11 月 7 日推出的 Firebase JavaScript SDK 的一项新功能:

  • Version 7.3.0 - November 7, 2019
  • array-contains-any

  • array-contains-any 运算符将同一字段上的最多 10 个数组包含子句与逻辑 OR 组合在一起。数组包含任何查询返回文档,其中给定字段是包含一个或多个比较值的数组”
    citiesRef.where('regions', 'array-contains-any',
    ['west_coast', 'east_coast']);

    关于javascript - Firebase Firestore - 使用多个 'array-contains' 过滤数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56544447/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com