向 firebase 查询添加动态 where 条件

Adding dynamic where conditions to a firebase query

我目前正在尝试通过文档属性在我的 firestore 数据库中获取数据,

我发现我可以做到

const qsnap = await firebase.firestore()
    .collection('blog-posts')
    .where(firebase.firestore.FieldPath.documentId(), "==", id)
    .where("published", "==" true)
    .get()

I'm trying to make it smarter or more dynamic

这很好用,但我发现了一个问题,我想动态地将 where 条件分配给查询 为了通过地图传递我想要查找的属性,像这样

params.forEach((k, v) => {
    _mainCollection.where(k, isEqualTo: v)
});
var result = await _mainCollection.get();

我认为这会起作用,因为我为地图中的每个值分配了几个位置,但它似乎不起作用我不确定为什么

那就试试这个

Query? query;
params.forEach((k, v) => {
   query = _mainCollection.where(k, isEqualTo: v)
});
var result = await query!.get();

它有效,但正如您想象的那样,它只是将地图的最后一个值分配给查询,因为我总是覆盖它

所以我正在寻找一种方法来在查询中包含多个 where 条件,基本上是存储在 foreach 映射中的所有条件,或者如果有任何方法可以将它们动态添加到集合查询中,那就是太好了,如果有人知道如何为我做这件事,那将会很有帮助。

你快到了。由于 QueryCollection 的父级 class,您可以:

Query query = _mainCollection;
params.forEach((k, v) => {
   query = query.where(k, isEqualTo: v)
});
var result = await query!.get();