Express.js 路由使用 _id 字段返回数据库查询空值

问题描述 投票:0回答:1

我有以下 Express.js 路线

router.post('/', async (req, res) => {
       try {
        console.log(`Request Body :\n${req.body}`);
        const {orderIDs} = req.body;
        console.log(`Order IDs : \n${orderIDs}`);

        for (const orderID of orderIDs) {
            const order = await Purchases.findById(orderID);
            console.log(order)
            const orderData = order.orderData;

            // Update stock Levels
            for (const item of orderData) {
                const product = await Products.findOne({productCode: item.productCode});
                await increaseQuantity(product.quantity, item.quantity, item.productCode);
            }
            // Update Purchases Table
            await updateOrderStatusPurchases(orderID);
            // Update TxnAudit Table
            await updateStatusTXN_AUDIT(orderID);
        }

        res.status(200).json({ message: 'Pending orders received'});
    } catch (error) {
        logger.error(error);
        res.status(500).json({ error: 'An error occurred while canceling orders' });
    }
  });

由于某种原因,每当我尝试使用 _id 字段从数据库检索特定订单时,即使该文档确实存在于数据库中,也会导致空值。

我尝试用

await Purchases.findById(orderID)
替换
await Purchases.findOne({"_id": orderID)
,但没有成功。

我还确保 Atlas 用户拥有正确的权限,并且我正在连接到正确的 mongodb 实例。

任何帮助将不胜感激。

提前致谢

更新

请求来自atlas控制台的数据库触发器,如下面的代码所示

import axios from 'axios'

exports = async function updatePurchases() {
    const purchasesCollection = context.services.get("LegendaryShields").db("test").collection("purchases");

    const twoDaysAgo = new Date();
    twoDaysAgo.setDate(twoDaysAgo.getDate() - 2);

    const query = {
        status: { $in: ["Awaiting payment", "TXN_AUTH_UNSUCCESSFUL", "TXN_FAILED"] },
        purchasedAt: { $lte: twoDaysAgo }
    };

    const projection = { _id: 1 };

    try {
        const purchases = await purchasesCollection.find(query, projection).toArray();
        const orderIDs = purchases.map((purchase) => purchase._id);

        const url = "http://ec2-13-246-182-9.af-south-1.compute.amazonaws.com:5300/cancel_order";

        const response = await axios.post(url, { orderIDs }, {
            headers: {
                'Content-Type': 'application/json'
            }
        });

        if (response.status === 200) {
            console.log(`API response: ${JSON.stringify(response.data)}`);
        } else {
            console.error(`API request failed with status: ${response.status}`);
        }
    } catch (error) {
        console.error(error);
    }
};

请求体如下所示:

请求正文: [对象对象] 订单 ID: 651a92d88799f214af2e8a5d,651c5aab28a1a56b70f8f4c8,652803ff12b17ae3aef24e15,6528e7eb427803d97a70abcf,6528ea3d427803d97a70abdf

javascript node.js mongodb express mongodb-query
1个回答
0
投票
router.post('/', async (req, res) => {
       try {
        console.log(`Request Body :\n${req.body}`);
        const {orderIDs} = req.body;
        console.log(`Order IDs : \n${orderIDs}`);

        for (const orderID of orderIDs) {
          // =====> console.log(orderID) can you log the order ID 
          // ====> you might replace orderId of orderIds.split(',')
            const order = await Purchases.findById(orderID);
            console.log(order)
            const orderData = order.orderData;

            // Update stock Levels
            for (const item of orderData) {
                const product = await Products.findOne({productCode: item.productCode});
                await increaseQuantity(product.quantity, item.quantity, item.productCode);
            }
            // Update Purchases Table
            await updateOrderStatusPurchases(orderID);
            // Update TxnAudit Table
            await updateStatusTXN_AUDIT(orderID);
        }

        res.status(200).json({ message: 'Pending orders received'});
    } catch (error) {
        logger.error(error);
        res.status(500).json({ error: 'An error occurred while canceling orders' });
    }
  });
© www.soinside.com 2019 - 2024. All rights reserved.