Typescript中的Firebase Firestore DocumentReference未返回文档属性



我正在编写一个Firebase云函数,它将编写一个Firestore文档,然后将文档的唯一ID返回到Flutter应用程序。我正在使用Typescript编写函数。

这是编写文档的代码:

db.collection('devices').doc().set({"deviceId": userId},{merge: true})
.then((docRef: FirebaseFirestore.DocumentReference<FirebaseFirestore.DocumentData>) => {
functions.logger.info(`Document path: ${docRef.path}`,{structuredData: true});
functions.logger.info(`Document written with ID: ${docRef.id}`,{structuredData: true});
response.status(200).send({"result":"success", "docId": docRef.id});
})
.catch((error: Error) => {
functions.logger.error(error,{structuredData: true});
response.status(200).send({"result":"error", "message": error.message});
});

set方法返回一个promise,该promise具有类型为DocumentReference并包含id的有效载荷。文档正在写入Firestore,但它没有得到DocumentReference的值,所以我可以在响应中发回它。

set()方法返回一个只有writeTime属性的WriteResult对象。返回DocumentReference的是add()方法,所以请尝试使用它,如下所示:

db.collection("devices").add({ deviceId: userId })
.then((docRef) => {
functions.logger.info(`Document written with ID: ${docRef.id}`,{structuredData: true});
})

如果你想使用set(),那么你必须将文档ID存储在它之前,如下所示:

const newDocRef = db.collection("devices").doc();
newDocRef.set({ deviceId: userId })
.then(() => {
functions.logger.info(`Document written with ID: ${newDocRef.id}`,{structuredData: true});
})

无论哪种方式,您都不需要{merge: true},因为它们将创建一个新文档。

相关内容

  • 没有找到相关文章