MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Atualização em massa de documentos no MongoDB

1. Visão geral


Neste tutorial, veremos como realizar atualizações em massa e operações de inserção no MongoDB. Além disso, o MongoDB fornece chamadas de API que permitem inserir ou recuperar vários documentos em uma única operação. MongoDB usa o Array ou Lote interfaces que melhoram muito o desempenho do banco de dados, reduzindo o número de chamadas entre o cliente e o banco de dados.

Neste tutorial, veremos as soluções usando o MongoDB Shell e o código do driver Java.

Vamos mergulhar na implementação da atualização em massa de documentos no MongoDB.

2. Inicialização do banco de dados


Primeiro de tudo, precisamos nos conectar ao shell do mongo:
mongo --host localhost --port 27017

Agora, configure um banco de dados baeldung e uma coleção de amostras populações :
use baeldung;
db.createCollection(populations);

Vamos adicionar alguns dados de amostra à coleção populações usando insertMany método:
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
}]);

O insertMany acima query retornará o seguinte documento:
{
    "acknowledged" : true,
    "insertedIds" : [
        ObjectId("623575049d55d4e137e477f6"),
        ObjectId("623575049d55d4e137e477f7"),
        ObjectId("623575049d55d4e137e477f8"),
        ObjectId("623575049d55d4e137e477f9")
    ]
}

Aqui, inserimos quatro documentos na consulta acima para realizar todos os tipos de operações de gravação em massa no MongoDB.

O banco de dados baeldung foi criado com sucesso e todos os dados necessários também são inseridos na coleção populações , então estamos prontos para realizar a atualização em massa.

3. Usando o MongoDB Shell Query


O construtor de operações em massa do MongoDB é usado para construir uma lista de operações de gravação em massa para uma única coleção. Podemos inicializar operações em massa de 2 maneiras diferentes. O método initializeOrderedBulkOp é usado para executar operações em massa na lista ordenada de operações de gravação. Uma das desvantagens do initializeOrderedBulkOp é que, se ocorrer um erro durante o processamento de qualquer operação de gravação, o MongoDB retornará sem processar as operações de gravação restantes na lista.

Podemos usar métodos insert, update, replace e remove para realizar diferentes tipos de operações em uma única chamada de banco de dados. Como ilustração, vamos examinar a consulta de operação de gravação em massa usando o shell do 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
                    }
             }
    }
]);

O bulkWrite acima query retornará o seguinte documento:
{
    "acknowledged" : true,
    "deletedCount" : 1,
    "insertedCount" : 2,
    "matchedCount" : 3,
    "upsertedCount" : 0,
    "insertedIds" : 
        {
            "0" : ObjectId("623575f89d55d4e137e477f9"),
            "1" : ObjectId("623575f89d55d4e137e477fa")
        },
    "upsertedIds" : {}
}

Aqui, na consulta acima, realizamos todos os tipos de operações de gravação, ou seja, insertOne , atualizarUm , excluirUm , substituirUm .

Primeiro, usamos insertOne método para inserir um novo documento na coleção. Em segundo lugar, usamos updateOne para atualizar o documento de cityName "Nova Delhi". Mais tarde, usamos o deleteOne método para excluir um documento da coleção com base no filtro. Por fim, usamos replaceOne  para substituir um documento completo pelo filtro cityName "Nova Iorque".

4. Usando o driver Java


Discutimos a consulta de shell do MongoDB para realizar as operações de gravação em massa. Antes de criar a operação de gravação em massa, vamos primeiro criar um MongoClient conexão com a coleção populações do banco de dados baeldung :
MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("baeldung");
MongoCollection<Document> collection = database.getCollection("populations");

Aqui, criamos a conexão com o servidor MongoDB, executando na porta padrão 27017. Vamos agora implementar as mesmas operações em massa usando o código 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);

Aqui, primeiro criamos uma lista de writeModel para adicionar todos os diferentes tipos de operações de gravação em uma única lista de atualização. Além disso, usamos InsertOneModel , AtualizarOneModel , UpdateManyModel , ExcluirOneModel e ReplaceOneModel em nossa consulta. Por fim, o bulkWrite O método executou todas as operações de uma só vez.