我正试图在firestore v9中创建一个调用,如果不存在数据,它将创建一个包含数据的子集合,如果存在数据,则进行更新,但这似乎不可能。似乎只有setDoc支持合并,而setDoc似乎不支持子集合(只有addDoc(。有什么办法可以做到这一点吗?如果这不能直接完成,我如何检查v9中是否存在子集合,如果存在,如何更新它?
下面的代码在colRef上产生一个typeerror,在执行时产生一个firebase错误
const db = getFirestore();
const docRef = doc(collection(db, 'Collection'), userId);
const colRef = collection(docRef, "Subcollection");
await setDoc(colRef, subcollectionData, { merge: true });
火球错误
[未处理的承诺拒绝:FirebaseError:应为类型"Sa",但它是:自定义Ca对象]";
似乎docRef
、colRef
和setDoc
的语法错误
如果您使用的是Firebase v9,它不应该有collection
,因为您已经引用了该集合,而对于colRef
,它应该是通过subCollection
的路径。
它仍然支持使用setDoc
的子集合,您只需要配置代码即可
setDoc
:的示例代码
const subColRef = doc(db, 'collectionName', 'documentID','subCollectionID', 'subCollectionName');
await setDoc(subColRef, subcollectionData, { merge: true });
addDoc
:的示例代码
const subcollectionData = {test:'test'};
const subColRef = collection(db, 'collectionName', 'documentID','subCollectionID');
await addDoc(subColRef, subcollectionData, { merge: true });
您可以参考此链接了解语法Web版本9(模块化(。