我从 firestore 中获取了按trained_on desc 订购的锻炼。
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”。
如何添加条目,其中trained_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 - 如何使用 firestore orderBy 但同时添加未定义的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64015699/