当尝试从mongodb中的数组提取对象时,确认:真,已修改计数:0,已更新ID:空,插入计数:0,匹配计数:1

bvjveswy  于 2023-01-08  发布在  Go
关注(0)|答案(1)|浏览(126)

我尝试从用户购物车中删除产品对象时,计数达到零。

changeProductCount : (details) => {
  return new Promise(async (resolve, reject) => {
    try {
      if (details.count==-1 && details.quantity==1) {
        console.log();
        let response = await db.get().collection(CART_COLLECTION)
          .updateOne({
            $and: [
              { _id: ObjectId(details.cart) }, 
              { 'products.time': parseInt(details.time) }
            ]
          }, {
            $pull : {
              products : { item : ObjectId(details.item) }
            }
          });

        if (response) {
          console.log(response);
          resolve({ removeProduct: true })
        }
      } else {
        let response = await db.get().collection(CART_COLLECTION)
          .updateOne({
            _id: ObjectId(details.cart),
            'products.time': details.time
          }, {
            $inc : {
              'products.$.quantity': parseInt(details.count)
            }
          });

        if (response) {
          console.log(response);
          resolve({removeProduct:false})
        }
      } 
    } catch (error) {
      reject(error)
    }
  })
}

这是我的代码,我试图从userCart的数组中提取一个对象,当它们的乘积计数是0时。
在这里,如果我把代码替换为:

let response = await db.get().collection(CART_COLLECTION)
  .updateOne({
    _id:ObjectId(details.cart)
  }, {
    $pull: {
      products: {
        item : ObjectId(details.item)
      }
    }
  }
);

这段代码是工作,但问题是,如果有两件衬衫具有相同的产品ID,但不同的尺寸,比如说中号和大号,当中号被删除,大号也被删除。这就是为什么我添加时间为每个对象时,它是第一次添加到购物车。但是,它是不工作的。请帮助我在这个问题。
这是我得到的回答:

{
  acknowledged: true,
  modifiedCount: 0,
  upsertedId: null,
  upsertedCount: 0,
  matchedCount: 1
}
cvxl0en2

cvxl0en21#

我解决了这个问题。这是我用的代码。

let response = await db.get().collection(CART_COLLECTION).updateOne({_id:ObjectId(details.cart)},{$pull : {products : {time : parseInt(details.time)}}});

由于时间已经是一个唯一的值,我使用它来匹配数组对象。

相关问题