首页 > 解决方案 > 如何检查对 mongoose 文档对象的数据库更改?

问题描述

想象如下处理订单:

Order.find({_id: '5faae1245e387720f4a4ef3a'})
    .then(async order => {
        const products = order.products; //array of products
        for(let index = 0; index < products.length; index++){
            const if_success = await processProduct(products[index]);
            //Do something based on if_success
            /* ... */
        }
    })
    .catch()

订单上可能有大量产品,并且for循环必须按顺序处理它们,这可能需要一段时间。诀窍是,当循环在不知道周围环境的情况下幸福地运行时,用户可以通过他们的门户网站for更改订单,在这种情况下,我想打破循环。5faae1245e387720f4a4ef3a

我当然可以通过在循环的每次迭代中运行一个查询来检查订单是否有待处理的更改来实现这一点,但我不愿意这样做,因为我不想用这些查询来敲击数据库,因为可能有一个数字这些循环为不同的订单并行运行。

另一个并没有太大不同的解决方案是在循环的每 x 次迭代中查询数据库以获取待处理的更改;if(index % x === 0)各种各样的东西。

后者是我目前倾向于的,但也许我错过了一些东西。

我觉得猫鼬可以在这里帮助我,所以从概念上讲,我正在努力做到这一点:

Order.find({_id: '5faae1245e387720f4a4ef3a'})
    .then(async order => {
        const products = order.products; //array of products
        for(let index = 0; index < products.length; index++){
            const if_success = await processProduct(products[index]);
            //Do something based on if_success
            /* ... */
            if(order.metadata.ifDocChanged)
                break;
        }
    })
    .catch()

有没有办法用猫鼬做类似的事情?

标签: node.jsmongodbmongoose

解决方案


推荐阅读