【问题标题】:Firebase Firestore how to add subcollectionFirebase Firestore 如何添加子集合
【发布时间】:2021-04-30 08:59:21
【问题描述】:

您好,我是编程新手,一直在使用 Firebase Firestore 作为我的数据库开发网站。

我想使用文档 ID 在我已经存在的集合 ('Einkaufsliste') 中创建一个子集合。但相反,它会创建一个具有不同文档 ID 和子集合的新文档。 使用 onClick 方法创建购物车。 计数器用于检查当前用户 ID 是否已经存在

继承我的 JavaScript 代码

function clickCart() {
var docID = '';
var user = firebase.auth().currentUser;
console.log(counter)
if(counter < 1) {
    console.log('DocID: ' + docID);
    firebaseDatabase.collection('Einkaufsliste').doc().set({
        UserID: user.uid,
        UserName: user.displayName
    })
    .then(() => {
        console.log("%c Document successfully written!", 'color: green' );
        counter = counter + 1
    })
    firebaseDatabase.collection('Einkaufsliste').where('UserID', '==', user.uid).get()
    .then((snapshot) => {
        snapshot.docs.forEach(documentUserUi => {
            console.log('Function works!')
            console.log(documentUserUi.id);
            docID = documentUserUi.id;
            console.log('DocID: ' + docID);

        })
    })
    console.log("hier!")
    console.log('DocID: ' + docID);
    firebaseDatabase.collection('Einkaufsliste').doc(docID).collection('Warenkorb').doc().set({
        WarenkorbName: 'test'
    })

} else {
    console.log("%c User already exists and can't be added", "color: yellow")
    console.log(counter)

}

}

编辑我认为我发现问题docID似乎为空,但仍然需要测试。 同样出于某种原因,console.log('hier') 输出早于 console.log('Funktion works!')

【问题讨论】:

    标签: javascript google-cloud-firestore


    【解决方案1】:

    .set() 接受一个对象作为参数并且不能为空。您应该提供如下所示的文档 ID:

    firebaseDatabase.collection('Einkaufsliste').doc(docID).collection('Warenkorb').doc("someDocumentId").set({
            WarenkorbName: 'test'
        })
    

    但如果您不关心文档 ID,那么您可以使用 firestore 通过 .add() 方法生成的随机 ID:

    firebaseDatabase.collection('Einkaufsliste').doc(docID).collection('Warenkorb').add({
            WarenkorbName: 'test'
        })
    

    【讨论】:

    • 使用 .add() 方法时会抛出错误:Uncaught FirebaseError: Function CollectionReference.doc() cannot be called with an empty path.
    • @Sythous 能否请您添加该错误的屏幕截图?
    • @Sythous 它是.collection("Warenkorb").add() 而不是.collection("Warenkorb").doc().add()
    • 代码:firebaseDatabase.collection('Einkaufsliste').doc(docID).collection('Warenkorb').add({ WarenkorbName: 'test' }) 喜欢这个? [链接] (imgur.com/a/euL6Fo6)
    • @Sythous 你能分享一下变量 firebaseDatabase 的样子吗?
    【解决方案2】:

    对于 Firebase 9,这是一个有效的示例:

    import { db } from "../firebase"; // your local firebase.js
    import { addDoc collection } from "firebase/firestore";
    
    const docRef = await addDoc(
          collection(db, "users", "sadasdsdasas", "posts"),
          {
            description: "test Description",
            title: "Test",
          }
        );
    
    
    console.log("Document written with ID: ", docRef.id);
    
    details:
    "users" => parentCollection
    "sadasdsdasas" => parent collection id
    "posts" => subCollection to into the user with the id "sadasdsdasas"
    
    

    文档:https://firebase.google.com/docs/firestore/data-model

    【讨论】:

      猜你喜欢
      • 2020-08-19
      • 2018-05-10
      • 2022-06-10
      • 1970-01-01
      • 2021-12-21
      • 2018-12-13
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多