javascript Firestore setDoc函数未合并React JS上的新项目

cetgtptt  于 2023-02-15  发布在  Java
关注(0)|答案(1)|浏览(88)

所以我试着用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:真的..

q9rjltbz

q9rjltbz1#

我还注意到merge: true仍然覆盖旧文档,这听起来像是一个bug。
有一个变通方法,使用updateDoc函数,但是文档必须存在才能使用此函数。

const walletRef = doc(db, 'marketplace', item.id);

const walletData = {item: item.id, wallet: account}

const walletSnapshot = getDoc(walletRef)

if (walletSnapshot.exists()) {
  updateDoc(walletRef, walletData);
} else {
  addDoc(collection(db, 'marketplace', walletData), 
}

不太理想,但现在应该可以了...

相关问题