Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/ / /
Driver Scala
/

Documentos

The Scala driver includes two Scala-specific representations for BSON documents. Following the convention from the Scala collections library, there are immutable and mutable implementations of the Document type. The underlying implementations of Document use the type-safe BsonDocument class. The BSON classes are available from the org.mongodb.scala.bson namespace, which includes type aliases and companion objects. These objects should suffice for many use cases, but for advanced use cases you may need to use classes from the org.bson namespace directly.

Importante

Nomes de chaves duplicados

O comportamento do servidor em relação a nomes de chave duplicados em um documento é indefinido. Quando um documento com nomes de chave duplicados é decodificado, o driver atribuirá o último valor associado à chave duplicada. Armazenar tal documento fará com que os outros valores sejam perdidos.

Observação

As classes Scala Document implementam TraversableLike[(String, BsonValue)] e a API geral espelha a de um valor Map[String, BsonValue] . No entanto, ao contrário Map, as implementações de TraversableLike habilitam a segurança rigorosa do tipo, pois não há variação no tipo de valor.

BsonValue é a representação segura de tipo de um tipo BSON da biblioteca org.bson e representa tipos de valor específicos. Os tipos de valor mais comumente usados são os seguintes:

Tipo de JSON
Tipo Scala

Document

org.mongodb.scala.bson.Document

Array

List

Date

Date ou int (milésimos de segundo desde a época)

Boolean

Boolean

Double

Double

Int32

Integer

Int64

Long

String

String

Binary

Array[Byte]

ObjectId

ObjectId

Null

None

É possível alterar ou estender esses mapeamentos, um processo descrito nas seções a seguir.

As seções a seguir descrevem as duas classes principais de Document .

Semelhante à biblioteca de coleções Scala, a classe imutável é a classe preferida. Para conveniência, ele tem nomes alternativos de org.mongodb.scala.Document e org.mongodb.scala.bson.Document , além de estar disponível em org.mongodb.scala.bson.collection.immutable.Document.

As instâncias desse tipo são imutáveis para todos. Essa coleção nunca mudará depois de criada. Portanto, você pode confiar no fato de que acessar o mesmo valor de coleção repetidamente em diferentes pontos no tempo sempre produzirá uma coleção com os mesmos elementos.

import org.mongodb.scala.bson._
val doc1 = Document("AL" -> BsonString("Alabama"))
val doc2 = doc1 + ("AK" -> BsonString("Alaska"))
val doc3 = doc2 ++ Document("AR" -> BsonString("Arkansas"), "AZ" -> BsonString("Arizona"))

Para obter o tipo Document mutável, você precisa importá-lo explicitamente de org.mongodb.scala.collections.mutable.Document. O Document mutável pode ser atualizado ou estendido no local. Isso significa que você pode alterar, adicionar ou remover elementos do Document como um efeito colateral. Semelhante às coleções Scala, ao lidar com tipos mutáveis, você precisa entender qual código muda qual coleção e quando.

import org.mongodb.scala.bson._
import org.mongodb.scala.bson.collection.mutable.Document
val doc = Document("AL" -> BsonString("Alabama"))
val doc1 = doc + ("AK" -> BsonString("Alaska")) // doc not mutated but new doc created
doc1 ++= Document("AR" -> BsonString("Arkansas"),
"AZ" -> BsonString("Arizona")) // doc1 mutated as ++= changes in place.

Para muitos dos tipos de BsonValue , existem mapeamentos diretos lógicos de um tipo de Scala. Por exemplo, um String mapeia para BsonString, um Int mapeia para BsonInt32 e um Long mapeia para um BsonInt64. Por conveniência, esses tipos podem ser usados diretamente com tipos Document e são convertidos pelas características de contrato no objeto BsonMagnets . Desde que haja um BsonTransformer implícito no escopo para qualquer tipo, esse tipo pode ser convertido em um BsonValue.

Os seguintes BsonTransformers estão no escopo por padrão:

Tipo Scala
BsonValor

Boolean

BsonBoolean

String

BsonString

Array[Byte]

BsonBinary

Regex

BsonRegex

Date

BsonDateTime

ObjectId

BsonObjectId

Int

BsonInt32

Long

BsonInt64

Double

BsonDouble

immutable.Document

BsonDocument

mutable.Document

BsonDocument

Option[T]

BsonValue onde T tem um BsonTransformer

Seq[(String, T)]

BsonDocument onde T tem um BsonTransformer

Seq[T]

BsonArray onde T tem um BsonTransformer

BsonValue

BsonValue

import org.mongodb.scala.Document
val doc1 = Document("AL" -> "Alabama")
val doc2 = doc1 + ("AK" -> "Alaska")
val doc3 = doc2 ++ Document("AR" -> "Arkansas", "population" -> 2.966)

This is achieved by making use of the Magnet Pattern, which you can learn more about in the Magnet Pattern blog post on spray.io.

Na API, onde normalmente esperariamos um único valor ou um par de valores-chave ou muitos pares de valores de chaves, como BsonValue, (String, BsonValue) ou Iterable[(String, BsonValue)], exigimos qualquer coisa que possa se tornar aqueles tipos por meio de características CanBeX que lidam com as conversões implícitas necessárias para estar em conformidade com os tipos corretos. Essas características são CanBeBsonValue, CanBeBsonElement e CanBeBsonElements.

Um desses exemplos é adicionar um par de valores-chave a um Document ou uma lista de valores:

val doc1 = Document("AL" -> "Alabama")
val doc2 = Document("codes" -> List("AL", "AK", "AR"))

O driver também contém uma interface pequena, mas poderosa, chamada Bson. Qualquer classe que represente um documento BSON, seja incluída no próprio driver ou de terceiros, pode implementar essa interface e, em seguida, ser usada em qualquer local da API de alto nível onde um documento BSON seja necessário. Por exemplo:

collection.find(Document("x" -> 1))
collection.find(Filters.eq("x", 1))

Voltar

Implementação BSON

Nesta página