javascript - 如何使用firestore orderBy但也添加未定义的值
问题描述
我从trained_on desc 订购的firestore 获取锻炼。
useEffect(() => {
let user = firebase.auth().currentUser;
const database = firebase.firestore();
const unsubscribe = database
.collection("workouts")
.where("uId", "==", user.uid)
.orderBy("trained_on", "desc")
.onSnapshot((snapshot) => {
setWorkouts(
snapshot.docs.map((doc) => ({ id: doc.id, ...doc.data() }))
);
});
return () => {
unsubscribe();
};
}, []);
这是忽略未设置trained_on 的条目。当我创建一个新的锻炼时,没有“trained_on”。
如何添加条目,其中受过训练的_on 也未定义?
解决方案
您无法查询 firestore 中不存在的字段。字段“trained_on”需要存在才能让 Firestore 索引知道它。
引用官方文档,https://firebase.google.com/docs/firestore/query-data/order-limit-data#order_and_limit_data
限制 请注意 orderBy() 子句的以下限制:
orderBy() 子句还过滤给定字段的存在。结果集将不包括不包含给定字段的文档。
此限制的一种可能解决方法是您使用单独的查询获取所有现有文档,然后手动从查询结果中减去这些文档。或者,也许您可以在所需文档中包含“trained_on”字段的标记值,例如null
. orderBy() 子句适用于null
值。
推荐阅读
- javascript - 确切路径不会捕获 slug
- sqlite - 如何使用 Rasa 2 在 Facebook 上创建每周调查
- python - 如何在循环中保存迭代如下?
- docker - 如何针对容器化服务器运行容器化 Cypress 运行程序?
- python - 忽略 Opentelemetry 中的一些 Flask 路由
- c++ - libusb 不返回总线/端口号
- c - printf 显示不同的值
- python - 从 BeautifulSoup 中的网站提取时,有没有办法处理不同的、更改的 class_names?
- reactjs - Chakra UI 不适用于 react-split-pane
- python - 在 Python 中使用用 C++ 编写的外部 QT 小部件