MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Групова актуализация на документи в MongoDB

1. Общ преглед

В този урок ще разгледаме извършването на групови актуализации и операции за вмъкване в MongoDB. Освен това MongoDB предоставя API извиквания, които позволяват вмъкване или извличане на множество документи в една операция. MongoDB използва Масива или Пакетно интерфейси, които значително подобряват производителността на базата данни, като намаляват броя на обажданията между клиента и базата данни.

В този урок ще разгледаме и двете решения с помощта на MongoDB Shell и кода на драйвер на Java.

Нека се потопим в прилагането на групово актуализиране на документи в MongoDB.

2. Инициализация на база данни

На първо място, трябва да се свържем с mongo shell:

mongo --host localhost --port 27017

Сега настройте база данни baeldung и колекция от извадки популации :

use baeldung;
db.createCollection(populations);

Нека добавим някои примерни данни в колекцията популации с помощта на insertMany метод:

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

Горното insertMany query ще върне следния документ:

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

Тук вмъкнахме четири документа в горната заявка, за да изпълним всички видове групови операции за писане в MongoDB.

Базата данни baeldung е създадена успешно и всички необходими данни също се вмъкват в популациите на колекцията , така че сме готови да извършим груповата актуализация.

3. Използване на MongoDB Shell Query

Създателят на групови операции на MongoDB се използва за конструиране на списък с операции за запис в насипно състояние за една колекция. Можем да инициализираме групови операции по 2 различни начина. Методът initializeOrderedBulkOp се използва за извършване на групови операции в подредения списък с операции за запис. Един от недостатъците на initializeOrderedBulkOp е, че ако възникне грешка при обработката на каквито и да е операции на запис, MongoDB ще се върне, без да обработва останалите операции за запис в списъка.

Можем да използваме методи за вмъкване, актуализиране, замяна и премахване, за да изпълняваме различни видове операции в едно извикване на DB. Като илюстрация, нека разгледаме заявката за операция за групово записване с помощта на обвивката на 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
                    }
             }
    }
]);

Горното bulkWrite query ще върне следния документ:

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

Тук, в горната заявка, извършихме всички видове операции за запис, т.е. insertOne , updateOne , deleteOne , заменете едно .

Първо използвахме insertOne метод за вмъкване на нов документ в колекцията. Второ, използвахме updateOne за да актуализирате документа на cityName "Ню Делхи". По-късно използвахме deleteOne метод за изтриване на документ от колекцията въз основа на филтъра. Накрая използвахме replaceOne за да замените пълен документ с филтър cityName „Ню Йорк“.

4. Използване на драйвер на Java

Обсъдихме заявката за обвивка на MongoDB за извършване на операциите за групово записване. Преди да създадем операцията за групово записване, нека първо създадем MongoClient връзка с колекцията популации на базата данни baeldung :

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

Тук създадохме връзката със сървъра MongoDB, работещ на порт по подразбиране 27017. Нека сега внедрим същите групови операции с помощта на 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);

Тук първо създадохме списък с writeModel за добавяне на всички различни типове операции за запис в един списък за актуализиране. Освен това използвахме InsertOneModel , UpdateOneModel , UpdateManyModel , DeleteOneModel и ReplaceOneModel в нашето запитване. И накрая, bulkWrite метод изпълни всички операции наведнъж.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Конкатениране на низ и число в SQL

  2. Redis или Mongo за определяне дали дадено число попада в диапазони?

  3. Запитване на масив от масиви в MongoDB

  4. MongoDB $radiansToDegrees

  5. Групиране по сума mongodb