.where() .limit() .orderBy() 的 Firebase 新命名空间

Firebase new namespace for .where() .limit() .orderBy()

为了限制对 FirestoreDB 的提取,我尝试将最近的命名空间用于 getDocs()。

const firebaseColRef = collection(db, "collection")

这是我试过的:

const firebaseColRef = collection(db, "collection").limit(x)

还有这个:

const getDB = async () => {
    const data = await getDocs(firebaseColRef).limit(x);
    setFilmDB(data.docs.map((doc) => ({ ...doc.data(), id: doc.id })));
  }

两种情况下控制台提示:

Uncaught (in promise) TypeError: firebase_firestore__WEBPACK_IMPORTED_MODULE_1__.collection(...).limit is not a function

我浏览了几个文档、教程和文章,但除了上面提到的以外,找不到任何其他名称空间。并尝试任何可能的 .limit(x) 追加以获得除控制台提示之外的任何其他结果。没有任何效果。

我错过了什么?

谁能指出我正确的方向?

将不胜感激。 谢谢,安东尼

几乎每个 Firebase 方法都是 Modular SDK 中的一个 top-level 函数,可以直接从相关 SDK 中导入。尝试重构代码,如下所示。

import { collection, getDocs, query, where, limit, orderBy } from "firebase/firestore";

const getDB = async () => {
  const colRef = collection(db, "collection");

  // Keep adding query clauses in query()
  // like chaining them in name-spaced V8 version
  const q = query(colRef, where("field", "==", "value"), limit(1));

  const data = await getDocs(q);
  console.log(data.docs.map((doc) => ({ ...doc.data(), id: doc.id })))
}

同查询的name-spaced版本供参考:

const q = db.collection("col").where("field", "==", "value").limit(1);

您可以在 documentation 中找到新 Firestore SDK 中所有功能的列表。

同时结帐: