如果项目是重复的firestore,则更新数组中的地图元素

全部

我知道 arrayUnion 不接受重复项,但是如果项目重复,我是否可以阻止这种情况并只更新一个字段(数量)?如果不存在解决方案,也许您对如何构建我的数据以实现这一点有另一个想法。谢谢

这是我的数据库:火库

这是我尝试这样做的功能(ofc这不起作用,因为异步):

 const addProductToCart=async()=>{

   const q = query(collection(db, "carts"), where("userUID", "==", user?.uid));
      const docRef = await getDocs(q);
      if(docRef.docs[0].exists){
         console.log('not empty');

         let products=docRef.docs[0].data().products;
         products.forEach((product)=>{
           //product exists
           if(product.productUniqueName == uniqueProductName){
            //console.log(product)
            let cloneProduct=product;
            let updateProduct=product;
            updateProduct.quantity=product.quantity+1;
            console.log('Updated product'+updateProduct);
            
            const currentUserCart=doc(db, 'carts', docRef.docs[0].id);
             updateDoc(currentUserCart, {
            cartItems: cartItems + 1,
            products: arrayRemove(cloneProduct),
            products: arrayUnion(updateProduct)
         });
           return;
           }
          })


        //productUniqueName
         let newProduct={};
         newProduct.productName=product.name;
         newProduct.productBrand=product.brand;
         newProduct.price=product.price;
         newProduct.size=product.quantity;
         newProduct.quantity=1;
         newProduct.productUniqueName=uniqueProductName;
         newProduct.img=productImages[0];

         const currentUserCart=doc(db, 'carts', docRef.docs[0].id);
         await updateDoc(currentUserCart, {
         cartItems: cartItems + 1,
         products: arrayUnion(newProduct)
       });

      }
      else{
        console.log('empty');
      }
    }
达玛拉吉

没有任何直接的方法可以做到这一点。您必须阅读文档,检查该项目是否已存在于该数组中,如果存在则增加数量并更新整个数组。如果没有,那么您可以将其添加到数组中。

我不确定您是否获取现有的购物车信息以向用户显示。如果您在初始加载时这样做,那么您可以直接从本地状态(存储购物车信息的位置)检查它并相应地更新。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果元素属于数组Firestore

从数组中删除重复的元素

无法获取地图元素的地址

如何使用golang更新Firestore中的数组元素?

如何读取/更新存储在地图中的值,然后将其存储在Cloud Firestore中的数组中?

如何在Go的html / template中获取地图元素的struct字段?

Golang中未定义的地图元素

如果在PHP中重复超过特定数量,如何从数组中删除项目?

如果存在则更新数组中的元素,否则在MongoDb中的该数组中插入新元素

更新数组中的元素

如果多维数组元素重复,则求和

Firestore更新数组字段中的单个项目

从子图元素获取已打印标签的列表,以避免在图例中重复输入

如何在Firestore数据库中快速更新数组中的对象(地图)?

数组中的元素重复

为地图元素设置innerHTML

当双向地图绑定中的地图元素发生变化时,您会收到通知

复制地图元素的正确方法

返回数组中重复的元素

在地图元素上循环的范围

访问地图向量的地图元素(C++)

重新框架:在嵌套向量中添加一个新的地图元素

数组中的随机项目,在 Javascript 中不重复元素

如何从 Groovy 中的列表创建地图元素或字典

Swift/FireStore - 追加/更新数组中的元素

flutter-firestore:如何计算地图中所有数组中的所有元素

如何使用项目列表更新 firestore 中文档中的地图

Javascript - 如果列表中已存在具有相同类型的地图,则过滤掉所有地图元素

更新 Firestore 中的地图字段