Menu Docs
Página inicial do Docs
/ /

Insira documentos

Neste guia, você pode aprender como usar o driver Kotlin para adicionar documentos a uma coleção MongoDB realizando operações de inserção.

Uma operação de inserção insere um ou mais documentos em uma coleção MongoDB . Você pode executar uma operação de inserção usando os seguintes métodos:

  • insertOne() para inserir um único documento

  • insertMany() para inserir um ou mais documentos

Nos exemplos a seguir, uma loja de tintas tem um estoque de diferentes cores de tinta. Esses dados são modelados com a seguinte classe de dados Kotlin:

data class PaintOrder(
@BsonId val id: ObjectId? = null,
val qty: Int,
val color: String
)

Em uma coleção MongoDB , cada documento deve conter um campo _id que tenha um valor único.

O MongoDB permite gerenciar este campo de duas maneiras:

  • Você mesmo pode definir este campo para cada documento, garantindo que cada valor do campo _id seja único.

  • Você pode permitir que o acionador gere automaticamente um valor de ObjectId único para cada documento _id. Se você não definir manualmente um valor _id para um documento, o driver preencherá o campo com uma ObjectId.

A menos que você possa garantir exclusividade, recomendamos deixar o driver gerar automaticamente os valores de _id .

Observação

Erros de _id duplicados

A definição de valores _id duplicados em uma coleção viola as restrições de índice único , o que faz com que o driver retorne um WriteError do método insertOne() ou um BulkWriteError do método insertMany() .

Para saber mais sobre o campo _id, consulte o guia Índices únicos no manual do servidor MongoDB.

Para aprender mais sobre a estrutura e as regras de documento, consulte o guia Documentos no manual do servidor MongoDB.

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.

O exemplo a seguir cria e insere um documento usando o método insertOne():

val paintOrder = PaintOrder(ObjectId(), 5, "red")
val result = collection.insertOne(paintOrder)
val insertedId = result.insertedId?.asObjectId()?.value
println("Inserted a document with the following id: $insertedId")
Inserted a document with the following id: 60930c39a982931c20ef6cd6

Para adicionar vários documentos a uma coleção MongoDB , use o método insertMany() e passe uma lista de documentos que você deseja adicionar. O método insertMany() insere documentos na ordem especificada até ocorrer uma exceção, se houver.

Se for bem-sucedido, o método retornará uma instância InsertManyResult representando _id de cada novo documento.

O exemplo seguinte cria e adiciona dois documentos a um List e insere o List utilizando o método insertMany():

val paintOrders = listOf(
PaintOrder(ObjectId(), 5, "red"),
PaintOrder(ObjectId(), 10, "purple")
)
val result = collection.insertMany(paintOrders)
println("Inserted documents with the following ids: ${result.insertedIds.toList()}")
Inserted documents with the following ids: [60930c3aa982931c20ef6cd7, 60930c3aa982931c20ef6cd8]

O método insertOne() retorna uma instância InsertOneResult e o método insertMany() retorna uma instância InsertManyResult .

Você pode utilizar os seguintes métodos para recuperar informações de uma instância do InsertOneResult :

Método
Descrição

getInsertedId()

Indica o valor _id do documento inserido.

wasAcknowledged()

Retorna true se o servidor reconhecer o resultado.

Você pode utilizar os seguintes métodos para recuperar informações de uma instância do InsertOneResult :

Método
Descrição

getInsertedIds()

Indica os valores _id dos documentos inseridos.

wasAcknowledged()

Retorna true se o servidor reconhecer o resultado.

Observação

Se o método wasAcknowledged() retornar false, tentar acessar os valores _id resultará em uma exceção InvalidOperation . O driver não pode determinar esses valores se o servidor não reconhecer a operação de gravação.

As seções seguintes fornecem exemplos completamente executáveis que demonstram como inserir documentos utilizando os métodos insertOne() e insertMany().

Os exemplos nesta seção usam a collection sample_movies.movies dos conjuntos de dados de amostra do Atlas. Para saber como criar um cluster MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte o guia Iniciar do Mongodb.

O exemplo a seguir se conecta a um cluster MongoDB , cria um objeto MongoClient e insere um único documento na coleção movies usando o método insertOne():

import com.mongodb.MongoException
import com.mongodb.kotlin.client.coroutine.MongoClient
import kotlinx.coroutines.runBlocking
import org.bson.codecs.pojo.annotations.BsonId
import org.bson.types.ObjectId
data class Movie(@BsonId val id: ObjectId, val title: String, val genres: List<String>)
fun main() = runBlocking {
// Replace the uri string with your MongoDB deployment's connection string
val uri = "<connection string uri>"
val mongoClient = MongoClient.create(uri)
val database = mongoClient.getDatabase("sample_mflix")
val collection = database.getCollection<Movie>("movies")
try {
val result = collection.insertOne(
Movie(ObjectId(), "Ski Bloopers", listOf("Documentary", "Comedy"))
)
println("Success! Inserted document id: " + result.insertedId)
} catch (e: MongoException) {
System.err.println("Unable to insert due to an error: $e")
}
mongoClient.close()
}
Success! Inserted document id: BsonObjectId{value=...}

O exemplo a seguir conecta a um cluster MongoDB , cria um objeto MongoClient e insere vários documentos na coleção movies usando o método insertMany():

import com.mongodb.MongoException
import com.mongodb.kotlin.client.coroutine.MongoClient
import kotlinx.coroutines.runBlocking
data class Movie(val title: String)
fun main() = runBlocking {
// Replace the uri string with your MongoDB deployment's connection string
val uri = "<connection string uri>"
val mongoClient = MongoClient.create(uri)
val database = mongoClient.getDatabase("sample_mflix")
val collection = database.getCollection<Movie>("movies")
val movieList = listOf(
Movie("Short Circuit 3"),
Movie("The Lego Frozen Movie")
)
try {
val result = collection.insertMany(movieList)
println("Success! Inserted document ids: " + result.insertedIds)
} catch (e: MongoException) {
System.err.println("Unable to insert due to an error: $e")
}
mongoClient.close()
}
Success! Inserted document ids: {0=BsonObjectId{value=...}, 1=BsonObjectId{value=...}}

Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API:

Voltar

reconhecimento de data center e collection

Nesta página