sql >> Database teknologi >  >> NoSQL >> MongoDB

Masseopdatering af dokumenter i MongoDB

1. Oversigt

I denne tutorial ser vi på at udføre masseopdateringer og indsætte operationer i MongoDB. Derudover leverer MongoDB API-kald, der gør det muligt at indsætte eller hente flere dokumenter i en enkelt operation. MongoDB bruger Array eller Batch grænseflader, som i høj grad forbedrer databasens ydeevne ved at reducere antallet af opkald mellem klienten og databasen.

I denne tutorial ser vi på både løsninger, der bruger MongoDB Shell og Java-driverkode.

Lad os dykke ned i implementering af masseopdatering af dokumenter i MongoDB.

2. Databaseinitialisering

Først og fremmest skal vi oprette forbindelse til mongo-skallen:

mongo --host localhost --port 27017

Opsæt nu en database baeldung og en prøvesamling af populationer :

use baeldung;
db.createCollection(populations);

Lad os tilføje nogle eksempeldata til samlingens populationer ved hjælp af insertMany metode:

db.populations.insertMany([
{
    "cityId":1124,
    "cityName":"New York",
    "countryName":"United States",
    "continentName":"North America",
    "population":22
},
{
    "cityId":1125,
    "cityName":"Mexico City",
    "countryName":"Mexico",
    "continentName":"North America",
    "population":25
},
{
    "cityId":1126,
    "cityName":"New Delhi",
    "countryName":"India",
    "continentName":"Asia",
    "population":45
},
{
    "cityId":1134,
    "cityName":"London",
    "countryName":"England",
    "continentName":"Europe",
    "population":32
}]);

Ovenstående insertMany forespørgsel returnerer følgende dokument:

{
    "acknowledged" : true,
    "insertedIds" : [
        ObjectId("623575049d55d4e137e477f6"),
        ObjectId("623575049d55d4e137e477f7"),
        ObjectId("623575049d55d4e137e477f8"),
        ObjectId("623575049d55d4e137e477f9")
    ]
}

Her indsatte vi fire dokumenter i ovenstående forespørgsel for at udføre alle typer skrive bulk-operationer i MongoDB.

Databasen baeldung er blevet oprettet med succes, og alle de nødvendige data er også indsat i samlingen populationer , så vi er klar til at udføre masseopdateringen.

3. Brug af MongoDB Shell Query

Bulk operations builder af MongoDB bruges til at konstruere en liste over skriveoperationer i bulk for en enkelt samling. Vi kan initialisere bulk operationer på 2 forskellige måder. Metoden initializeOrderedBulkOp bruges til at udføre masseoperationer i den ordnede liste over skriveoperationer. En af ulemperne ved initializeOrderedBulkOp er, at hvis der opstår en fejl under behandling af skriveoperationer, vender MongoDB tilbage uden at behandle de resterende skriveoperationer på listen.

Vi kan bruge indsætte, opdatere, erstatte og fjerne metoder til at udføre forskellige typer operationer i et enkelt DB-kald. Som en illustration, lad os se nærmere på bulk-skriveoperationsforespørgslen ved hjælp af MongoDB-skallen:

db.populations.bulkWrite([
    { 
        insertOne :
            { 
                "document" :
                    {
                        "cityId":1128,
                        "cityName":"Kathmandu",
                        "countryName":"Nepal",
                        "continentName":"Asia",
                        "population":12
                    }
            }
    },
    { 
        insertOne :
            { 
                "document" :
                    {
                        "cityId":1130,
                        "cityName":"Mumbai",
                        "countryName":"India",
                        "continentName":"Asia",
                        "population":55
                    }
            }
    },
    { 
        updateOne :
            { 
                "filter" : 
                     { 
                         "cityName": "New Delhi"
                     },
                 "update" : 
                     { 
                         $set : 
                         { 
                             "status" : "High Population"
                         } 
                     }
            }
    },
    { 
        updateMany :
            { 
                "filter" : 
                     { 
                         "cityName": "London"
                     },
                 "update" : 
                     { 
                         $set : 
                         { 
                             "status" : "Low Population"
                         } 
                     }
            }
    },
    { 
        deleteOne :
            { 
                "filter" : 
                    { 
                        "cityName":"Mexico City"
                    } 
            }
    },
    { 
        replaceOne :
            {
                "filter" : 
                    { 
                        "cityName":"New York"
                    },
                 "replacement" : 
                    {
                        "cityId":1124,
                        "cityName":"New York",
                        "countryName":"United States",
                        "continentName":"North America",
                        "population":28
                    }
             }
    }
]);

Ovenstående bulkWrite forespørgsel returnerer følgende dokument:

{
    "acknowledged" : true,
    "deletedCount" : 1,
    "insertedCount" : 2,
    "matchedCount" : 3,
    "upsertedCount" : 0,
    "insertedIds" : 
        {
            "0" : ObjectId("623575f89d55d4e137e477f9"),
            "1" : ObjectId("623575f89d55d4e137e477fa")
        },
    "upsertedIds" : {}
}

Her udførte vi i ovenstående forespørgsel alle typer skriveoperationer, dvs. insertOne , updateOne , deleteOne , erstat One .

Først brugte vi insertOne metode til at indsætte et nyt dokument i samlingen. For det andet brugte vi updateOne for at opdatere dokumentet for bynavn "New Delhi". Senere brugte vi deleteOne metode til at slette et dokument fra samlingen baseret på filteret. Til sidst brugte vi replaceOne  at erstatte et komplet dokument med filteret bynavn "New York".

4. Brug af Java-driver

Vi har diskuteret MongoDB shell-forespørgslen for at udføre bulk-skriveoperationerne. Før du opretter masseskriveoperationen, lad os først oprette en MongoClient forbindelse med samlingen populationer af databasen baeldung :

MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("baeldung");
MongoCollection<Document> collection = database.getCollection("populations");

Her oprettede vi forbindelsen til MongoDB-serveren, der kører på standardport 27017. Lad os nu implementere de samme bulk-handlinger ved hjælp af Java-koden:

List<WriteModel<Document>> writeOperations = new ArrayList<WriteModel<Document>>();
writeOperations.add(new InsertOneModel<Document>(new Document("cityId", 1128)
  .append("cityName", "Kathmandu")
  .append("countryName", "Nepal")
  .append("continentName", "Asia")
  .append("population", 12)));
writeOperations.add(new InsertOneModel<Document>(new Document("cityId", 1130)
  .append("cityName", "Mumbai")
  .append("countryName", "India")
  .append("continentName", "Asia")
  .append("population", 55)));
writeOperations.add(new UpdateOneModel<Document>(new Document("cityName", "New Delhi"),
  new Document("$set", new Document("status", "High Population"))
));
writeOperations.add(new UpdateManyModel<Document>(new Document("cityName", "London"),
  new Document("$set", new Document("status", "Low Population"))
));
writeOperations.add(new DeleteOneModel<Document>(new Document("cityName", "Mexico City")));
writeOperations.add(new ReplaceOneModel<Document>(new Document("cityId", 1124), 
  new Document("cityName", "New York").append("cityName", "United States")
    .append("continentName", "North America")
    .append("population", 28)));
BulkWriteResult bulkWriteResult = collection.bulkWrite(writeOperations);
System.out.println("bulkWriteResult:- " + bulkWriteResult);

Her oprettede vi først en liste over writeModel for at føje alle de forskellige typer skrivehandlinger til en enkelt opdateringsliste. Desuden brugte vi InsertOneModel , UpdateOneModel , UpdateManyModel , DeleteOneModel , og ReplaceOneModel i vores forespørgsel. Til sidst den bulkWrite metode udførte alle operationerne på én gang.


  1. Top Redis Use Cases efter kernedatastrukturtyper

  2. Mongodb concat int og streng

  3. Kombiner to Redis-instanser til en enkelt instans med to dbs

  4. Definering af et Mongoose-skema på farten fra en JSON-formateret 'beskrivelse'