我看了其他问题,觉得我的问题与众不同。
我正在将(可能)大量信息发送回后端,这是示例数据集:
[ { 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是唯一的,除非我抓住updateMany
和driverReq:false
的所有订单(因为在这种情况下他们已经准备好打印了。
答案 0 :(得分:0)
我找到了一个解决方案,实际上是使用UpdateMany。
Order.updateMany({
isPrinted: false, driverReq:false
},
{
$set: {
isPrinted: true
}
请考虑一下这种特殊情况,即当需要将其更改为太真时,两者均为假。但是我确实想知道是否有一种方法可以轻松地遍历多个文档ID。