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()
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()
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.