way to update multiple documents with different values

后端 未结 4 1205
再見小時候
再見小時候 2021-01-17 08:41

I have the following documents:

[{
  \"_id\":1,
  \"name\":\"john\",
  \"position\":1
},
 {\"_id\":2,
  \"name\":\"bob\",
  \"position\":2
},
 {\"_id\":3,
           


        
4条回答
  •  萌比男神i
    2021-01-17 08:59

    Since MongoDB 4.2 update can accept aggregation pipeline as second argument, allowing modification of multiple documents based on their data.

    See https://docs.mongodb.com/manual/reference/method/db.collection.update/#modify-a-field-using-the-values-of-the-other-fields-in-the-document

    Excerpt from documentation:

    Modify a Field Using the Values of the Other Fields in the Document

    Create a members collection with the following documents:

    db.members.insertMany([
      { "_id" : 1, "member" : "abc123", "status" : "A", "points" : 2, "misc1" : "note to self: confirm status", "misc2" : "Need to activate", "lastUpdate" : ISODate("2019-01-01T00:00:00Z") },
      { "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment", "lastUpdate" : ISODate("2019-01-01T00:00:00Z") }
    ])
    

    Assume that instead of separate misc1 and misc2 fields, you want to gather these into a new comments field. The following update operation uses an aggregation pipeline to:

    • add the new comments field and set the lastUpdate field.
    • remove the misc1 and misc2 fields for all documents in the collection.
    db.members.update(
      { },
      [
         { $set: { status: "Modified", comments: [ "$misc1", "$misc2" ], lastUpdate: "$$NOW" } },
         { $unset: [ "misc1", "misc2" ] }
      ],
      { multi: true }
    )
    

提交回复
热议问题