繁体   English   中英

Cloud Functions:collection() 的第一个参数应为 CollectionReference、DocumentReference 或 FirebaseFirestore

[英]Cloud Functions: Expected first argument to collection() to be a CollectionReference, a DocumentReference or FirebaseFirestore

嗨,我写了这个 function

const functions = require("firebase-functions");
const admin = require("firebase-admin");
const { setDoc, doc } = require("firebase/firestore");
admin.initializeApp();
const db = admin.firestore();


// // Create and Deploy Your First Cloud Functi
exports.idiot = functions.pubsub.schedule('* * * * *').onRun(async (context) => {
    // // Add a new document with a generated id
    const moment = require('moment')
    console.log("testtesttest 603")
    console.log(db.collection)
    const Questions = 
    {
        Questions: {
            QoD: "test",
            Upvotes: 0,
        }
    }
    const Comments = 
    {
        Comments: {
            Body: "hello",
            Replies: [],
            Upvotes: 0
        }
    }

    await setDoc(doc(db, "Questions", moment().format('MMM Do YYYY')), Questions);
    await setDoc(doc(db, "Comments", moment().format('MMM Do YYYY')), Comments);
});

突然我收到这个错误:

2022-09-28T00:59:00.846793Z ? idiot: FirebaseError: Expected first argument to collection() to be a CollectionReference, a DocumentReference or FirebaseFirestore
2022-09-28T00:59:00.848764071Z D idiot: Function execution took 9 ms. Finished with status: error

但是它之前是在写文档。

之前脚本运行时是否会弹出此错误?

您在此处导入两个不同的 SDK:

const admin = require("firebase-admin");
const { setDoc, doc } = require("firebase/firestore");

第一行导入 Firebase Admin SDK,它设计用于 Cloud Functions 等可信环境。

第二行从客户端导入两个函数 JavaScript SDK ,用于常规应用。

虽然两个 SDK 的 API 大体相同,但两者并不二进制兼容。 因此, db变量指向Firestore object 和 Admin SDK,而您的doc function 期望来自客户端 JavaScript SDK 的Firestore object。

仅使用管理员 SDK:

const questionRef = db.doc("Questions", moment().format('MMM Do YYYY'));
await questionRef.set(Questions);

然后相当于评论。

在文档中,您需要查找此语法的v8代码示例,例如文档中有关写入文档参考的此处。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM