所以我试着用Walletwrite函数检查文档是否已经存在,如果文档不存在,就用我想加的值创建一个新文档,或者用那些新值加一个新字段来更新一个现有文档,所有这些都是在React JS上完成的。
但是,如果文档已经存在,我的setDoc函数实际上会覆盖现有数据。
你知道问题出在哪里吗?
async function Walletwrite() {
//These first 2 consts check if the entry is already in that specific document to prevent duplicates.
const marketRef = db.collection("marketplace");
const query = marketRef.where("wallet", "array-contains", account).where("item", "==", item.id).limit(1);
query.get().then((snapshot) => {
if (snapshot.empty == false) {
console.log(snapshot)
return
}
else{
//This is where it gets tricky and merge: true is not working
const walletRef = doc(db, 'marketplace', item.id);
setDoc(walletRef, {item: item.id, wallet: account} , { merge: true });
}
});
}
尝试了不同的firestore函数,但没有一个适合我的用例,除了这个带有merge的setDoc:真的..
1条答案
按热度按时间q9rjltbz1#
我还注意到
merge: true
仍然覆盖旧文档,这听起来像是一个bug。有一个变通方法,使用
updateDoc
函数,但是文档必须存在才能使用此函数。不太理想,但现在应该可以了...