Cloud Firestore 中的 SQL LIKE 运算符?
Posted
技术标签:
【中文标题】Cloud Firestore 中的 SQL LIKE 运算符?【英文标题】:SQL LIKE operator in Cloud Firestore? 【发布时间】:2018-03-20 10:31:17 【问题描述】:我使用 Firebase Real Time Fatabase 已经有一段时间了,今天我遇到了 Cloud Firestore。我不知道如何在 Firestore 上使用 LIKE 运算符。
Firebase 实时数据库
ref.child('user').orderByChild('name').startAt(name).endAt(name+'\uf8ff')
在 Cloud Firestore 上,我已经尝试过
userRef.where('name', '>=', name); <br>
userRef.where('name', '<=', name);
但它不起作用。
【问题讨论】:
【参考方案1】:要解决这个问题,您需要将orderByChild
函数更改为orderBy
。所以请使用以下代码:
ref.collection('user').orderBy('name').startAt(name).endAt(name+'\uf8ff')
【讨论】:
当应用程序需要另一个 order By 以用于分页目的以及 .startAfter() 和 .endBefore() 时,这不起作用。我们不能指望在使用这个技巧时,我们必须停用不正确的分页功能。【参考方案2】:没有与 LIKE 等效的方法,但您可以像在 RTDB 中一样进行前缀过滤。
你写的查询和equals是一样的。你需要通过技巧来做同样的事情,并且做得比<
少。
【讨论】:
另请参阅此处给出的建议:***.com/questions/46568142/…。简而言之,如果您提前对可能要搜索的单词进行分段,则可以部分模拟这一点。【参考方案3】:没有这样的运算符,允许的是==, <, <=, >, >=.
在这里您可以找到 Cloud Firestore 中查询的所有限制:https://firebase.google.com/docs/firestore/query-data/queries
【讨论】:
【参考方案4】:仅供参考:对于更高版本的 Cloud Firestore(例如 0.12.5),startAt() 和 endAt() 方法需要一个字符串列表,而不是单个字符串。
【讨论】:
【参考方案5】:Firebase 版本 9 更新
import query, collection, getDocs, orderBy, startAt, endAt from "firebase/firestore";
//db is exported from your firebase.js file
const ref = collection(db, "user");
const q = query(ref, orderBy('name'), startAt(name), endAt(name+'\uf8ff'));
const querySnapshot = await getDocs(q);
querySnapshot.forEach((doc) =>
console.log(doc.id, " => ", doc.data());
);
【讨论】:
以上是关于Cloud Firestore 中的 SQL LIKE 运算符?的主要内容,如果未能解决你的问题,请参考以下文章
使用规则禁用 Firebase Cloud Firestore 中的查询集合
Flutter 中的 cloud_firestore 和 firebase_auth 兼容性问题
在 `.symlinks/plugins/cloud_firestore/ios` 中找不到 `cloud_firestore` 的 podspec