FirebaseError:文档引用无效。文档引用必须有偶数个段,

Sel*_*ena 4 javascript firebase google-cloud-firestore

第一次寻求帮助。

\n

在这个问题上卡住了一段时间。

\n
// Database setup\nimport { initializeApp } from "firebase/app";\nimport { doc, setDoc, addDoc, collection, getFirestore, getDocs } from "firebase/firestore";\n// Your web app\'s Firebase configuration\n\n// Your web app\'s Firebase configuration\nconst firebaseConfig = {the data in here}\n\n// Initialize Firebase\nconst app = initializeApp(firebaseConfig);\nconst db = getFirestore(app);\n\n/**\n * Creates new eqipment\n */\nexport async function opretUdstyr(navn, type, note) {\n    try {\n        const uuid = generateUUID();\n        let nyUdstyr = {\n            navn: navn,\n            type: type,\n            note: note,\n            status: "Tilg\xc3\xa6ngelig",\n            fra: "",\n            til: "",\n            UUID: uuid\n        };\n        const docref = doc(collection(db, \'udstyr\'));\n        await addDoc(docref, nyUdstyr);\n    } catch (e) {\n        console.error(e)\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我收到的错误是:\nFirebaseError:文档引用无效。文档引用必须具有偶数个段,但 udstyr/hRjRFVcgr8Q2nCeHcNbp/8zTbs2qnPOMWW91JTksb 有 3 个。

\n

尝试将方法更改为以下:

\n
const docref = doc(collection(db, \'udstyr\'));\nto\nconst docref = collection(db, \'udstyr\');\n
Run Code Online (Sandbox Code Playgroud)\n

现在我收到一个我看不到的错误。老实说,不知道错误是什么。

\n

我上面有这个函数,它的作用就像一个魅力:

\n
export async function getUdstyr() {\n    const equipment = collection(db, \'udstyr\');\n    const snapshot = await getDocs(equipment);\n    const result = snapshot.docs.map(doc => doc.data());\n    return result;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

所以这不属于错误收集的情况。

\n

编辑:由于这里的数据不敏感,所以是整个控制器以及 firestore 数据库的外观。

\n

Firestore 数据库:\n在此输入图像描述

\n

具有 3 个工作的控制器 + 我的创建不起作用。

\n
// Database setup\nimport { initializeApp } from "firebase/app";\nimport { doc, setDoc, addDoc, collection, getFirestore, getDocs } from "firebase/firestore";\n// Your web app\'s Firebase configuration\n\n// Your web app\'s Firebase configuration\nconst firebaseConfig = {\n    apiKey: "AIzaSyAOW2ufaAdHaOvP82u5VwoNVZ9bgkzWh-E",\n    authDomain: "booking-system-test-866d0.firebaseapp.com",\n    projectId: "booking-system-test-866d0",\n    storageBucket: "booking-system-test-866d0.appspot.com",\n    messagingSenderId: "413437808749",\n    appId: "1:413437808749:web:610bfaabb471329bbeef64"\n};\n\n// Initialize Firebase\nconst app = initializeApp(firebaseConfig);\nconst db = getFirestore(app);\n\n/**\n * Returns snapshot of all equipment\n */\nexport async function getUdstyr() {\n    const equipment = collection(db, \'udstyr\');\n    const snapshot = await getDocs(equipment);\n    const result = snapshot.docs.map(doc => doc.data());\n    return result;\n}\n\n/**\n * Returns snapshot of all bookings\n */\nexport async function getBookings() {\n    const booking = collection(db, \'bookings\');\n    const snapshot = await getDocs(booking);\n    const result = snapshot.docs.map(doc => doc.data());\n    return result;\n}\n\n/**\n * Returns snapshot of all rentings\n */\nexport async function getUdlaan() {\n    const udlaan = collection(db, \'udlaan\');\n    const snapshot = await getDocs(udlaan);\n    const result = snapshot.docs.map(doc => doc.data());\n    return result;\n}\n\n/**\n * Creates new eqipment\n */\nexport async function opretUdstyr(navn, type, note) {\n    try {\n        const uuid = generateUUID();\n        let nyUdstyr = {\n            navn: navn,\n            type: type,\n            note: note,\n            status: "Tilg\xc3\xa6ngelig",\n            fra: "",\n            til: "",\n            UUID: uuid\n        };\n        /*const docref = collection(db, \'udstyr\');\n        await addDoc(docref, nyUdstyr);*/\n\n        await addDoc(collection(db, \'udstyr\'), nyUdstyr);\n\n        /*const docref = doc(collection(db, \'udstyr\'));\n        const colref = collection(docref, \'subcollection\');\n        await addDoc(colref, nyUdstyr);*/\n\n    } catch (e) {\n        console.error(e)\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Fra*_*len 13

Firestore 数据模型是:

  1. 在顶层你有收藏。
  2. 在每个集合中,您(可以)拥有文档。
  3. 每个文档都可以再次嵌套集合。
  4. ETC。

所以文档的路径总是 gothecollection/thedocidthecollection/thedocid/nestedcollection/anotherdocid等等。

在您的第一个代码片段中,您执行以下操作:

const docref = doc(collection(db, 'udstyr'));
await addDoc(docref, nyUdstyr);
Run Code Online (Sandbox Code Playgroud)

这里的第一行设置对文档的引用。但是第二行然后尝试将文档添加到该文档,根据我给出的模型这是不可能的。

文档只能存在于(子)集合中,不能直接存在于另一个文档中。因此,您可以使用以下方法将其添加到顶级集合中:

await addDoc(collection(db, 'udstyr'), nyUdstyr);
Run Code Online (Sandbox Code Playgroud)

或者,如果需要,您可以将文档添加到子集合中,如下所示:

const docref = doc(collection(db, 'udstyr'));
const colref = collection(docref, 'subcollection'));
await addDoc(colref, nyUdstyr);
Run Code Online (Sandbox Code Playgroud)

  • @fabc 感谢您尝试提供帮助。我希望我可以帮助未来的人了解为什么我的错误会发生,如果他们的错误也以同样的方式发生的话。但唉,我很高兴它有效。 (2认同)