mongodb returns matchCount 1 但 modifiedCount 0

mongodb returns matchCount 1 but modifiedCount 0

我正在制作一个网络应用程序,其中一张卡片显示产品的数量。还有一个名为 Delivered 的按钮。点击按钮后,我想减少数量 1.假设,一个产品的数量是 10,如果我点击 Delivered 按钮,产品的数量应该变成 9,并且它应该在 mongoDb 数据库上更新。幸运的是它奏效了。但是我遇到了一个小问题。问题是,当我第一次单击按钮时 mongoDb returns acknowledged: true, modifiedCount: 0, upsertedId: null, upsertedCount: 0, matchedCount: 1 并且数据从 UI 更新但未在 mongoDb 服务器中更新。然后我第二次点击按钮然后 mongoDb returns acknowledged: true, modifiedCount: 1, upsertedId: null, upsertedCount: 0, matchedCount: 1。客户站点代码如下:

const { _id, img, name, seller, price, qnt, description } = product

const [quantity, setQuantity] = useState(qnt);

const handleQnt = () => {
    const numQuantity = Number(quantity);
    setQuantity(numQuantity - 1);

    const url = `http://localhost:5000/update-quantity/${_id}`;

    fetch(url, {
        method: 'PUT',
        headers: {
            'content-type': 'application/json'
        },
        body: JSON.stringify({
            qnt: quantity
        })
    })
        .then(res => res.json())
        .then(result => {
            console.log(result);
        });

}
console.log(quantity);

按钮代码是:

<button onClick={() => handleQnt()} > Delivered </button>

并且服务器站点代码是:

 app.put('/update-quantity/:id', async (req, res) => {

        const id = req.params.id;

        const data = req.body;

        const filter = { _id: ObjectId(id) };

        const options = { upsert: true };

        const updatedDoc = {
            $set: {
                qnt: data.qnt
            },

        };

        const result = await camCollection.updateOne(filter, updatedDoc, options);

        res.send(result)
    })

您从客户端发送 quantity,但该变量未反映 setQuantity() 所做的更改。您应该声明 let newNumQuantity = numQuantity - 1 并向服务器发送 newNumQuantity 而不是数量。