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 复合查询的主要内容,如果未能解决你的问题,请参考以下文章
用于列表构建的 Flutter 中的 Firestore 嵌套查询