Flutter Firestore 复合查询

Posted

技术标签:

【中文标题】Flutter Firestore 复合查询【英文标题】:Flutter firestore compound query 【发布时间】:2018-10-23 07:06:04 【问题描述】:

我想知道是否有一种方法可以在 Flutter 中查询 firebase firestore 集合,向查询中添加多个字段。我尝试了一些方法,但我没有意识到如何做到这一点。例如:

CollectionReference col = Firestore.instance
    .collection("mycollection");

col.where('nome', isEqualTo: 'Tyg');
col.where('valor', isLessThan: '39');

有人,请有办法做到这一点?我是 Flutter 的新手,但没有找到方向。

【问题讨论】:

你试过var query = col.where('nome', isEqualTo: 'Tyg').where('valor', isLessThan: '39');吗? 嗯,我会试试这个方法,让你知道好不好。非常感谢您的回复。 【参考方案1】:

构建 Firestore 查询遵循“构建器模式”。每次调用 where 时,它都会返回一个新的查询对象。所以你的代码构造了两个查询,你没有分配给任何东西。

CollectionReference col = Firestore.instance
    .collection("mycollection");

Query nameQuery = col.where('nome', isEqualTo: 'Tyg');
Query nameValorQuery = nameQuery.where('valor', isLessThan: '39');

【讨论】:

非常感谢 Frank 的解释,现在我想知道是否可以像 SQL 一样创建 OR 子句,例如:Query nameQuery = col.where('nome', isEqualTo : 'Tyg' 或 isEqualTo: 'Xtg'),或者即使有办法在 SQL 中做为 LIKE。非常感谢您的帮助。 我觉得奇怪的一点是,当我使用 isLessThan: 39 时,它没有返回任何值,但是当我输入 isEqualTo: 36 时,它返回了包含该值的文档。所以我认为 isLessThan 必须返回 36 原因小于 39,我错了吗? 既不支持 OR 也不支持 LIKE 查询。见github.com/firebase/firebase-js-sdk/issues/321。虽然这是针对 javascript SDK 的,但这些都是服务器端操作,因此一旦服务器支持它们,它们通常会同时/大约同时登陆所有平台。 哦,这不好知道,我一直在寻找这样的东西 (teamsCollection.where("members", "array_contains", 123, 345, 234)),以查看具有数组中有一些元素,例如,如果一个文档在数组中有 123 个键,则输入结果,如果有 234 等等。我将不得不考虑如何采用不同的方式。谢谢弗兰克的帮助。 此页面描述了如何开始使用它:firebase.google.com/docs/firestore/solutions/arrays 但是您仍然需要为每个成员单独查询。

以上是关于Flutter Firestore 复合查询的主要内容,如果未能解决你的问题,请参考以下文章

在 Firestore 中执行复合查询时出错

用于列表构建的 Flutter 中的 Firestore 嵌套查询

使用 Flutter 的 Firestore 组集合查询

Flutter:按时间戳查询 Firestore 文档

Flutter 和 Firestore 基于位置的查询和数据结构

在 Dart / Flutter 的 Firestore 查询中添加限制时,不会调用 Stream Listen