MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Zbiorcza aktualizacja dokumentów w MongoDB

1. Przegląd

W tym samouczku przyjrzymy się wykonywaniu zbiorczych aktualizacji i operacji wstawiania w MongoDB. Ponadto MongoDB udostępnia wywołania API, które umożliwiają wstawianie lub pobieranie wielu dokumentów w jednej operacji. MongoDB używa tablicy lub Pakiet interfejsy, które znacznie poprawiają wydajność bazy danych, zmniejszając liczbę połączeń między klientem a bazą danych.

W tym samouczku przyjrzymy się obu rozwiązaniom wykorzystującym powłokę MongoDB i kod sterownika Java.

Zanurzmy się w implementację masowej aktualizacji dokumentów w MongoDB.

2. Inicjalizacja bazy danych

Przede wszystkim musimy połączyć się z powłoką mongo:

mongo --host localhost --port 27017

Teraz skonfiguruj bazę danych baeldung i zbiór próbek populacje :

use baeldung;
db.createCollection(populations);

Dodajmy przykładowe dane do zbioru populacje za pomocą insertMany metoda:

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
}]);

Powyższy insertMany zapytanie zwróci następujący dokument:

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

Tutaj wstawiliśmy cztery dokumenty do powyższego zapytania, aby wykonać wszystkie typy operacji zapisu zbiorczego w MongoDB.

Baza danych baeldung została pomyślnie utworzona, a wszystkie wymagane dane są również umieszczane w kolekcji populacje , więc jesteśmy gotowi do przeprowadzenia zbiorczej aktualizacji.

3. Korzystanie z zapytania powłoki MongoDB

Konstruktor operacji zbiorczych MongoDB służy do konstruowania listy operacji zapisu zbiorczego dla pojedynczej kolekcji. Operacje zbiorcze możemy zainicjować na 2 różne sposoby. Metoda initializeOrderedBulkOp służy do wykonywania operacji zbiorczych na uporządkowanej liście operacji zapisu. Jedna z wad initializeOrderedBulkOp jest to, że jeśli wystąpi błąd podczas przetwarzania jakichkolwiek operacji zapisu, MongoDB zwróci bez przetwarzania pozostałych operacji zapisu na liście.

Możemy używać metod insert, update, replace i remove do wykonywania różnych typów operacji w jednym wywołaniu DB. Jako ilustrację przyjrzyjmy się zapytaniu operacji zbiorczego zapisu przy użyciu powłoki MongoDB:

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
                    }
             }
    }
]);

Powyższy bulkWrite zapytanie zwróci następujący dokument:

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

Tutaj, w powyższym zapytaniu, wykonaliśmy wszystkie rodzaje operacji zapisu, tj. insertOne , updateOne , deleteOne , zamień jeden .

Najpierw użyliśmy insertOne metodę wstawienia nowego dokumentu do kolekcji. Po drugie, użyliśmy updateOne zaktualizować dokument cityName „Nowe Delhi”. Później użyliśmy deleteOne metoda usuwania dokumentu z kolekcji na podstawie filtru. Na koniec użyliśmy replaceOne zastąpić cały dokument filtrem cityName „Nowy Jork”.

4. Korzystanie ze sterownika Java

Omówiliśmy zapytanie powłoki MongoDB do wykonywania operacji zapisu zbiorczego. Przed utworzeniem operacji zapisu zbiorczego utwórzmy najpierw MongoClient połączenie z kolekcją populacje bazy danych baeldung :

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

W tym miejscu utworzyliśmy połączenie z serwerem MongoDB działającym na domyślnym porcie 27017. Zaimplementujmy teraz te same operacje zbiorcze za pomocą kodu Java:

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);

Tutaj najpierw utworzyliśmy listę writeModel aby dodać wszystkie różne typy operacji zapisu do jednej listy aktualizacji. Ponadto użyliśmy InsertOneModel , Aktualizuj OneModel , Aktualizuj wiele modeli , UsuńOneModel i ReplaceOneModel w naszym zapytaniu. Wreszcie bulkWrite metoda wykonała wszystkie operacje naraz.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Łączenie z MongoDB 3.0 za pomocą Java Spring

  2. Pymongo / MongoDB:utworzyć indeks czy zapewnić indeks?

  3. błąd:parametr typu `D` musi być użyty jako parametr typu dla niektórych typów lokalnych

  4. MongoDB $sin

  5. Mongoengine:ConnectionError:Nie zdefiniowałeś domyślnego połączenia