【问题标题】:Flutter firestore compound queryFlutter Firestore 复合查询
【发布时间】: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');吗?
  • 嗯,我会试试这个方法,让你知道好不好。非常感谢您的回复。

标签: firebase dart google-cloud-firestore flutter


【解决方案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 但是您仍然需要为每个成员单独查询。
猜你喜欢
  • 2020-11-22
  • 2019-12-03
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
  • 2020-02-04
  • 2020-10-10
  • 2020-01-27
  • 2021-08-17
相关资源
最近更新 更多