Menu Docs
Página inicial do Docs
/ / /
Scala
/

Documentos

Nesta página

  • Visão geral
  • Documentos imutáveis
  • Documentos mutáveis
  • Conversões implícitas
  • Bson

O driver Scala inclui duas representações específicas do Scala para documentos BSON. Seguindo a convenção da biblioteca de coleções Scala, há implementações imutáveis e mutáveis do tipo Document . As implementações subjacentes do Document utilizam o tipo seguro BsonDocument aula. As classes BSON estão disponíveis no namespace org.mongodb.scala.bson , que inclui aliases de tipo e objetos complementares. Esses objetos devem ser suficientes para muitos casos de uso, mas para casos de uso avançados, talvez seja necessário usar classes do namespace org.bson diretamente.

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)

Isso é feito usando o Padrão img, sobre o qual você pode saber mais na publicação do blog sobre Padrão img em trigger.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