在mongodb中更新数组中的多个元素

Mri*_*yay 2 arrays mongodb mongodb-query

我在mongodb的股票收藏中有一份文件如下.

{ _id: 'xRMuRBhqRLgASyQyW',
  History: 
     [ { orderId: '12032017001877',
         status: 'COMPLETED',
        },
       { orderId: '22122017002450', 
        status: 'PROCESSED',
        },
        { orderId: '22122018002450', 
        status: 'DEPOSIT',
        }  
     ] 
 }
Run Code Online (Sandbox Code Playgroud)

我想迭代stocks集合中的所有文档,flag: true如果状态不是,则添加一个字段'PROCESSED'.

Ash*_*shh 8

您需要使用all $ []位置运算符来更新数组中的每个元素

db.collection.update(
   { "History": { "$elemMatch": { "status": { "$ne": "PROCESSED" } } } }, 
   { "$set": { "History.$[].flag": false } },
   { "multi": true }
)
Run Code Online (Sandbox Code Playgroud)

  • 先生,这是一个很好的,但我认为应该为'upsert'和'multi'添加两个额外的参数(基本上是假的和真的,因为它们适合我).在这里我写的是因为'multi'所以它可以改变多个文档. (2认同)