Inserir operações
Nesta página
Visão geral
Neste guia, você pode aprender como inserir documentos com o driver MongoDB Java.
Você pode usar o MongoDB para recuperar, atualizar e excluir informações. Para uma dessas operações, tais informações, como perfis de usuário e pedidos, precisam existir no MongoDB. Para que elas existam, primeiro realize uma operação de inserção.
Uma operação de inserção insere um ou vários documentos no MongoDB usando os métodos insertOne()
, insertMany()
e bulkWrite()
.
As seções a seguir focam em insertOne()
e insertMany()
. Para obter informações sobre como usar o método bulkWrite()
, consulte nosso guia sobre operações em massa.
Uma observação sobre _id
Ao inserir um documento, o MongoDB impõe uma restrição aos seus documentos por padrão: cada documento deve conter um campo _id
exclusivo.
Há duas maneiras de gerenciar este campo:
Você mesmo pode gerenciar esse campo, garantindo que cada valor usado seja exclusivo.
Você pode permitir que o acionador gere automaticamente valores de ObjectId únicos.
A menos que você tenha fornecido garantias sólidas de exclusividade, recomendamos que deixe o driver gerar automaticamente os valores de _id
.
Observação
Os valores _id
duplicados violam restrições de índice único, resultando em um WriteError
.
Para obter informações adicionais sobre índices únicos, consulte a entrada manual sobre Índices únicos.
Inserir um único documento
Use o método insertOne()
quando quiser inserir um único documento.
Em uma inserção bem-sucedida, o método retorna uma instância do InsertOneResult
representando o _id
do novo documento.
Exemplo
O exemplo a seguir cria e insere um documento usando o método insertOne()
:
Document doc1 = new Document("color", "red").append("qty", 5); InsertOneResult result = collection.insertOne(doc1); System.out.println("Inserted a document with the following id: " + result.getInsertedId().asObjectId().getValue());
A saída do código anterior se assemelha ao seguinte:
Inserted a document with the following id: 60930c39a982931c20ef6cd6
Para obter mais informações sobre os métodos e classes descritas nesta seção, consulte os seguintes recursos:
insertOne() Documentação da API
InsertOneResult Documentação da API
Explicação manual sobre insertOne()
Exemplo de inserção de documento executável
Insira vários documentos
Use o método insertMany()
quando quiser inserir vários documentos. Este método insere documentos na ordem especificada até ocorrer uma exceção, se houver.
Por exemplo, suponha que você queira inserir os seguintes documentos:
{ "_id": 3, "color": "red", "qty": 5 } { "_id": 4, "color": "purple", "qty": 10 } { "_id": 3, "color": "yellow", "qty": 3 } { "_id": 6, "color": "blue", "qty": 8 }
Se você tentar inserir esses documentos, um WriteError
ocorrerá no terceiro documento, e os documentos anteriores ao erro serão inseridos na sua collection.
Dica
Use um bloco try-catch para obter uma confirmação de documentos processados com êxito antes que o erro ocorra:
List<Integer> insertedIds = new ArrayList<>(); // Inserts sample documents and prints their "_id" values try { InsertManyResult result = collection.insertMany(documents); result.getInsertedIds().values() .forEach(doc -> insertedIds.add(doc.asInt32().getValue())); System.out.println("Inserted documents with the following ids: " + insertedIds); // Prints a message if any exceptions occur during the operation and the "_id" values of inserted documents } catch(MongoBulkWriteException exception) { exception.getWriteResult().getInserts() .forEach(doc -> insertedIds.add(doc.getId().asInt32().getValue())); System.out.println("A MongoBulkWriteException occurred, but there are " + "successfully processed documents with the following ids: " + insertedIds); }
O resultado consiste em documentos que MongoDB pode processar e deve parecer algo assim:
A MongoBulkWriteException occurred, but there are successfully processed documents with the following ids: [3, 4, 6]
Se você examinar sua coleção, deverá ver os seguintes documentos:
{ "_id": 3, "color": "red", "qty": 5 } { "_id": 4, "color": "purple", "qty": 10 }
Em uma inserção bem-sucedida, o método retorna uma instância do InsertManyResult
representando o _id
de cada novo documento.
Exemplo
O exemplo seguinte cria e adiciona dois documentos a um List
e insere o List
utilizando o método insertMany()
:
List<Document> documents = new ArrayList<>(); Document doc1 = new Document("color", "red").append("qty", 5); Document doc2 = new Document("color", "purple").append("qty", 10); documents.add(doc1); documents.add(doc2); InsertManyResult result = collection.insertMany(documents); // Retrieves and prints the ID values of each inserted document List<ObjectId> insertedIds = new ArrayList<>(); result.getInsertedIds().values() .forEach(doc -> insertedIds.add(doc.asObjectId().getValue())); System.out.println("Inserted documents with the following ids: " + insertedIds);
A saída do código anterior se assemelha ao seguinte:
Inserted documents with the following ids: [60930c3aa982931c20ef6cd7, 60930c3aa982931c20ef6cd8]
Para obter mais informações sobre os métodos e classes descritas nesta seção, consulte os seguintes recursos:
insertMany() Documentação da API
InsertManyResult Documentação da API
Explicação manual sobre insertMany()
Exemplo de inserção de vários documentos executáveis
Resumo
Há três maneiras de realizar uma operação de inserção, mas nos concentramos em duas:
O método
insertOne()
insere um único documento.O método
insertMany()
insere vários documentos.
Ambos os métodos geram automaticamente um _id
se você omitir o campo em seu documento.
Se a inserção for bem-sucedida, ambos os métodos retornarão uma instância representando _id
de cada novo documento.