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是一样的。你需要通过技巧来做同样的事情,并且做得比&lt;少。

【讨论】:

另请参阅此处给出的建议:***.com/questions/46568142/…。简而言之,如果您提前对可能要搜索的单词进行分段,则可以部分模拟这一点。【参考方案3】:

没有这样的运算符,允许的是==, &lt;, &lt;=, &gt;, &gt;=. 在这里您可以找到 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 运算符?的主要内容,如果未能解决你的问题,请参考以下文章

如何删除 Cloud Firestore 中的复合索引?

我无法显示Cloud Firestore中的图像

使用规则禁用 Firebase Cloud Firestore 中的查询集合

Flutter 中的 cloud_firestore 和 firebase_auth 兼容性问题

在 `.symlinks/plugins/cloud_firestore/ios` 中找不到 `cloud_firestore` 的 podspec

安装 cloud_firestore 包后在 Flutter 中的 iOS 模拟器上运行应用程序时出错