Come aggiornare più di 4 documenti in MongoDB usando un ciclo for
È possibile aggiornare i documenti in una collezione MongoDB in molti modi a seconda delle esigenze dell'applicazione. Userò un esempio e mostrerò alcuni modi dalla shell di mongo:
Un esempio di collezione di studenti:
- { "_id" : ObjectId("5d8f2a2629f213c15536c81f"), "studentNo" : 1, "name" : "Mark" }
- { "_id" : ObjectId("5d8f2a2629f213c15536c820"), "studentNo" : 2, "name" : "Jim" }
- { "_id" : ObjectId("5d8f2a2629f213c15536c821"), "studentNo" : 3, "name" : "Krish" }
- { "_id" : ObjectId("5d8f2a2629f213c15536c822"), "studentNo" : 4, "name" : "Raj" }
- { "_id" : ObjectId("5d8f2a2629f213c15536c823"), "studentNo" : 5, "name" : "Kim" }
Update the Collection:
{a) The following statements update all the documents in the collection using the updateMany and update methods:
- db.students.updateMany( { }, { : { gender: "Male" } } )
- db.students.update( { }, { : { gender: "Male" } }, { multi: true } )
(b) The following code updates documents with studentNo's 1 thru 5 using a for-loop.
- for (let i = 1; i < 6; i++) {
- db.students.updateOne( { studentNo: i }, { : { gender: "Male" } } );
- }
Using a Cursor:
The db.collection.find() method returns a cursor; and this can be iterated to update the documents in many ways. Note the cursor gets exhausted after iteration is complete.
- let cur = db.students.find( { } );
- while (cur.hasNext()) {
- let doc = cur.next();
- // ... [*]
- }
[*] For example, you can use this statement to update individual documents within the loop: db.students.updateOne( { studentNo: doc.studentNo }, { : { gender: "Male" } } )
-or-
- cur.forEach(doc => // ... [*] )
-or-
- for (let doc of cur.toArray()) {
- // ... [*]
- }
NOTE: In addition, mongoDB also has findAndModify and replaceOne methods to update documents. See Update Documents (MongoDB documentation).