更新mongodb中的多个不同文档(nodejs后端)

时间:2019-03-20 01:24:28

标签: javascript mongodb

我看了其他问题,觉得我的问题与众不同。

我正在将(可能)大量信息发送回后端,这是示例数据集:

   [ { orders: [Array],
       _id: '5c919285bde87b1fc32b7553',
       name: 'Test',
       date: '2019-03-19',
       customerName: 'Amego',
       customerPhone: '9991112222',
       customerStreet: 'Lost Ave',
       customerCity: 'WestZone',
       driver: 'CoolCat',
       driverReq: false, // this is always false when it is ready to print
       isPrinted: false, // < this is important
       deliveryCost: '3',
       total: '38.48',
       taxTotal: '5.00',
       finalTotal: '43.48',
       __v: 0 },
     { orders: [Array],
       _id: '5c919233bde87b1fc32b7552',
       name: 'Test',
       date: '2019-03-19',
       customerName: 'Foo',
       customerPhone: '9991112222',
       customerStreet: 'Found Ave',
       customerCity: 'EastZone',
       driver: 'ChillDog',
       driverReq: false,// this is always false when it is ready to print
       isPrinted: false, // < this is important
       deliveryCost: '3',
       total: '9.99',
       taxTotal: '1.30',
       finalTotal: '11.29',
       __v: 0 },
     { orders: [Array],
       _id: '5c91903b6e0b7f1f4afc5c43',
       name: 'Test',
       date: '2019-03-19',
       customerName: 'Boobert',
       customerPhone: '9991112222',
       customerStreet: 'Narnia',
       customerCity: 'SouthSzone',
       driver: 'SadSeal',
       driverReq: false,// this is always false when it is ready to print
       isPrinted: false, // < this is important
       deliveryCost: '3',
       total: '41.78',
       taxTotal: '5.43',
       finalTotal: '47.21',
       __v: 0 } ] }

我的前端可以找到所有包含isPrinted:false的订单,然后我允许最终用户“打印”所有准备好的订单,其中,我需要将isPrinted更改为{ {1}},这样,当我提取下一批时,就不会再打印。

我一直在查看true,目前我允许每个订单设置一个新的驱动程序,并通过以下方式更新:

db.test.updateMany({foo: "bar"}, {$set: {isPrinted: true}})

非常简单,因为一次只返回1个订单。

我考虑过前端要进行一次foreach并分别发布每个订单,然后分别更新Order.update({ _id: mongoose.Types.ObjectId(req.body.id) }, { $set: { driver:req.body.driver, driverReq:false } ,但这似乎效率很低。 mongo是否为此提供了一个优雅的解决方案?

我不确定如何使用isPrinted来考虑每个_id是唯一的,除非我抓住updateManydriverReq:false的所有订单(因为在这种情况下他们已经准备好打印了。

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案,实际上是使用UpdateMany。

Order.updateMany({
    isPrinted: false, driverReq:false
}, 
{
    $set: {
        isPrinted: true
    }

请考虑一下这种特殊情况,即当需要将其更改为太真时,两者均为假。但是我确实想知道是否有一种方法可以轻松地遍历多个文档ID。