Firebase 错误 - 向 Query.startAt() 提供了太多参数

Con*_*ejo 8 javascript firebase google-cloud-firestore

我试图弄清楚为什么我会收到此错误

FirebaseError:向 Query.startAt() 提供的参数太多。参数的数量必须小于或等于 Query.orderBy() 子句的数量

用这个代码:

const query = firebase
  .getDatabase()
  .collection("users")
  .where("premium", "==", true) // get premium users
  .where("totalPosts", ">", 0); // that have posted some music


...

return query
    .startAt(0)
    .limit(1)
    .get()
    .then((snapshot) => {
          ...
    );
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在尝试吸引发布了一些音乐的高级用户。我使用的是 where 和 startAt 子句,而不是 orderBy。

我究竟做错了什么?

谢谢!

Dou*_*son 8

仔细阅读错误信息:

参数的数量必须小于或等于 Query.orderBy() 子句的数量

您的代码根本不显示任何 orderBy 子句,因此本例中的数字为 0。但是您向 提供了 1 个参数startAt()。具体来说,您实际上应该提供一个 orderBy 子句。它必须与您的范围查询的字段匹配:

const query = firebase
  .getDatabase()
  .collection("users")
  .where("premium", "==", true) // get premium users
  .where("totalPosts", ">", 0)  // that have posted some music
  .orderBy("totalPosts")
Run Code Online (Sandbox Code Playgroud)

然后,您的分页应该重复完全相同的查询,只是这次使用 startAt 告诉它从哪里获取:

return query.startAt(0);
Run Code Online (Sandbox Code Playgroud)

  • 分页查询需要了解文档的顺序,以便每个页面对同一系列查询使用相同的顺序。Firestore 不会猜测您想要的顺序。 (2认同)