javascript - 如何使用 firestore orderBy 但同时添加未定义的值

标签 javascript reactjs firebase google-cloud-firestore

我从 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/

相关文章:

javascript - D3 替换对象

angular - 将 FirebaseListObservable 结果转换为对象

javascript - 使用jquery将字符串数组转换为整数

javascript - 如何在 angular2 *ngFor 中的每次迭代中调用组件中的方法?

javascript - Angularjs ui路由器手动导航

javascript - reactjs lifecycle 有可视化流程图吗?

javascript - ReactJS - 使用 onBlur 验证电子邮件字段

reactjs - useMutation 中的 onCompleted 回调没有返回值

firebase - 从 Firestore Listen 回调返回列表

web - 在 Web 服务器上实现 Firebase 云消息传递