reactivemongo.api.bson
BSON main API
import reactivemongo.api.bson._
// { "name": "Johny", "surname": "Doe", "age": 28, "months": [1, 2, 3] }
BSONDocument.empty ++ ("name" -> "Johny") ++ ("surname" -> "Doe") ++
("age" -> 28) ++ ("months" -> array(1, 2, 3))
// { "_id": generatedId, "name": "Jane", "surname": "Doe", "age": 28,
// "months": [1, 2, 3], "details": { "salary": 12345,
// "inventory": ["foo", 7.8, 0, false] } }
document.++("_id" -> generateId, "name" -> "Jane", "surname" -> "Doe",
"age" -> 28, "months" -> array(1, 2, 3),
"details" -> document(
"salary" -> 12345L, "inventory" -> array("foo", 7.8, 0L, false)))
'''System properties:'''
The following properties can be set (e.g. using JVM -D
options).
reactivemongo.api.bson.bufferSizeBytes
(integer; default:96
): Number of bytes used as initial size when allocating a new buffer.reactivemongo.api.bson.document.strict
(boolean; default:false
): Flag to enable strict reading of document (filter duplicate fields, see BSONDocument.asStrict).
Type members
Classlikes
A BSON binary value.
A BSON binary value.
import reactivemongo.api.bson.{ BSONBinary, Subtype }
BSONBinary("foo".getBytes("UTF-8"), Subtype.GenericBinarySubtype)
- Value parameters:
- subtype
The type of the binary content.
- value
The binary content.
- Companion:
- object
BSONBinary utilities
BSONBinary utilities
import reactivemongo.api.bson.{ BSONBinary, Subtype }
val bin1 = BSONBinary(
"foo".getBytes("UTF-8"), Subtype.GenericBinarySubtype)
// See Subtype.UuidSubtype
val uuid = BSONBinary(java.util.UUID.randomUUID())
- Companion:
- class
BSONBoolean factories & utilities
BSONBoolean factories & utilities
- Companion:
- class
A BSON value that can be seen as a boolean.
A BSON value that can be seen as a boolean.
Conversions:
number = 0 ~> false
number != 0 ~> true
boolean
undefined ~> false
null ~> false
import scala.util.Success
import reactivemongo.api.bson.{ BSONBooleanLike, BSONDocument, BSONInteger }
val bi = BSONInteger(1)
assert(bi.asTry[BSONBooleanLike].flatMap(_.toBoolean) == Success(true))
val doc = BSONDocument("field" -> bi)
assert(doc.getAsTry[BSONBooleanLike]("field").
flatMap(_.toBoolean) == Success(true))
- Companion:
- object
BSONDateTime factories & utilities
BSONDateTime factories & utilities
- Companion:
- class
Value wrapper for a BSON 128-bit decimal.
Value wrapper for a BSON 128-bit decimal.
- Value parameters:
- high
the high-order 64 bits
- low
the low-order 64 bits
- Companion:
- object
BSONDecimal factories & utilities
BSONDecimal factories & utilities
- Companion:
- class
A BSONDocument
structure (BSON type 0x03
).
A BSONDocument
structure (BSON type 0x03
).
A BSONDocument
is an unordered set of fields (String, BSONValue)
.
'''Note:''' The insertion/initial order of the fields may not be maintained through the operations.
- Companion:
- object
BSONDocument factories & utilities.
BSONDocument factories & utilities.
reactivemongo.api.bson.BSONDocument("foo" -> 1, "bar" -> "lorem")
- Companion:
- class
Reads and writers T
values to/from BSONDocument.
Reads and writers T
values to/from BSONDocument.
- Companion:
- object
BSONDocumentHandler factories
BSONDocumentHandler factories
- Companion:
- class
BSONDocumentWriter factories.
BSONDocumentWriter factories.
- Companion:
- class
BSONDouble utilities
BSONDouble utilities
import reactivemongo.api.bson.BSONDouble
BSONDouble(1.23D) match {
case BSONDouble(v) => assert(v == 1.23D)
case _ => ???
}
- Companion:
- class
BSONElement factories and utilities.
BSONElement factories and utilities.
- Companion:
- class
A BSON handler is able to both read and write T
values
from/to BSON representation.
A BSON handler is able to both read and write T
values
from/to BSON representation.
import scala.util.Try
import reactivemongo.api.bson.{ BSONHandler, BSONValue }
def roundtrip[T](value: T)(implicit handler: BSONHandler[T]): Try[Boolean] =
for {
bson: BSONValue <- handler.writeTry(value)
dser <- handler.readTry(bson)
} yield (dser == value) // true
- Companion:
- object
BSONInteger factories & utilities
BSONInteger factories & utilities
- Companion:
- class
BSON JavaScript value.
BSON JavaScript value.
- Value parameters:
- value
The JavaScript source code.
- Companion:
- object
BSONJavaScript factories & utilities
BSONJavaScript factories & utilities
- Companion:
- class
BSON JavaScript value with scope (WS).
BSON JavaScript value with scope (WS).
- Value parameters:
- value
The JavaScript source code.
- Companion:
- object
BSONJavaScriptWS factories & utilities
BSONJavaScriptWS factories & utilities
- Companion:
- class
A BSON value that can be seen as a number.
A BSON value that can be seen as a number.
Conversions:
- numeric BSON types (BSONDecimal, BSONDouble, BSONInteger, BSONLong)
- BSON date/time ~> long (BSONDateTime
.value
) - BSON timestamp ~> long (BSONTimestamp.value)
import scala.util.Success
import reactivemongo.api.bson.{ BSONNumberLike, BSONDocument, BSONInteger }
val bi = BSONInteger(1)
assert(bi.asTry[BSONNumberLike].flatMap(_.toLong) == Success(1L))
val doc = BSONDocument("field" -> bi)
assert(doc.getAsTry[BSONNumberLike]("field").
flatMap(_.toDouble) == Success(1D))
- Companion:
- object
BSON ObjectId value.
BSON ObjectId value.
import scala.util.Try
import reactivemongo.api.bson.BSONObjectID
val oid: BSONObjectID = BSONObjectID.generate()
def foo: Try[BSONObjectID] = BSONObjectID.parse(oid.stringify)
Timestamp (seconds) | Machine identifier | Thread identifier | Increment |
---|---|---|---|
4 bytes | 3 bytes | 2 bytes | 3 bytes |
- Companion:
- object
BSON Regex value.
BSON Regex value.
- Value parameters:
- flags
the regex flags
- value
the regex value (expression)
- Companion:
- object
'''EXPERIMENTAL:''' Strict documentation representation with at most one value per field name (no duplicate).
'''EXPERIMENTAL:''' Strict documentation representation with at most one value per field name (no duplicate).
import reactivemongo.api.bson.BSONDocument
def strict1 = // { 'foo': 1 }
BSONDocument.strict("foo" -> 1, "foo" -> 2)
def strict2 = BSONDocument("foo" -> 1, "foo" -> 2).asStrict
assert(strict1 == strict2)
BSONString utilities
BSONString utilities
import reactivemongo.api.bson.BSONString
BSONString("foo") match {
case BSONString(v) => v == "foo"
case _ => false
}
- Companion:
- class
BSON Symbol value.
BSON Symbol value.
- Value parameters:
- value
the symbol value (name)
- Companion:
- object
Evidence that T
can be serialized as a BSON document.
Evidence that T
can be serialized as a BSON document.
- Companion:
- object
Naming strategy, to map each class property to the corresponding field.
Naming strategy, to map each class property to the corresponding field.
import reactivemongo.api.bson.{ FieldNaming, MacroConfiguration }
def initCfg(naming: FieldNaming): MacroConfiguration =
MacroConfiguration(fieldNaming = naming)
- See also:
- Companion:
- object
Type level evidence that type A
is not type B
.
Type level evidence that type A
is not type B
.
- Companion:
- object
Mapping from a BSON string to T
;
Used by scala.collection.Map handlers.
Mapping from a BSON string to T
;
Used by scala.collection.Map handlers.
final class Foo(val v: String) extends AnyVal
val bson = reactivemongo.api.bson.BSONDocument(
"foo:key" -> 1, "foo:name" -> 2)
import reactivemongo.api.bson.KeyReader
implicit def fooKeyReader: KeyReader[Foo] =
KeyReader[Foo] { str =>
new Foo(str.stripPrefix("foo:"))
}
reactivemongo.api.bson.BSON.readDocument[Map[Foo, Int]](bson)
// Success: Map[Foo, Int](
// (new Foo("key") -> 1),
// (new Foo("name") -> 2))
- Companion:
- object
Mapping from a BSON string to T
.
Used by scala.collection.Map handlers.
Mapping from a BSON string to T
.
Used by scala.collection.Map handlers.
final class Foo(val v: String) extends AnyVal
val dict = Map[Foo, Int](
(new Foo("key") -> 1),
(new Foo("name") -> 2))
import reactivemongo.api.bson.KeyWriter
implicit def fooKeyWriter: KeyWriter[Foo] =
KeyWriter[Foo] { foo =>
"foo:" + foo.v
}
reactivemongo.api.bson.BSON.writeDocument(dict)
// Success = {'foo:key': 1, 'foo:name': 2}
- Companion:
- object
Macro configuration;
Macro configuration;
It allows to configure compile time options, and behaviour to be retained at runtime (field & type naming).
import reactivemongo.api.bson.{
BSONDocumentReader, MacroConfiguration, Macros
}
case class Foo(name: String)
val r1: BSONDocumentReader[Foo] = Macros.configured.reader[Foo]
val r2: BSONDocumentReader[Foo] = Macros.configured(
MacroConfiguration.simpleTypeName).reader[Foo]
- See also:
- Companion:
- object
MacroConfiguration factories and utilities
MacroConfiguration factories and utilities
- Companion:
- class
Macros with 'Opts' suffix will take additional options in the form of type parameters that will customize behaviour of the macros during compilation.
Macros with 'Opts' suffix will take additional options in the form of type parameters that will customize behaviour of the macros during compilation.
import reactivemongo.api.bson.{ BSONDocumentWriter, Macros, MacroOptions }
case class Bar(score: Float)
val w: BSONDocumentWriter[Bar] =
Macros.using[MacroOptions.Default].writer[Bar]
- Companion:
- object
MacroOptions factories & utilities.
MacroOptions factories & utilities.
- Companion:
- class
Macros for generating BSONReader
and BSONWriter
at compile time.
Macros for generating BSONReader
and BSONWriter
at compile time.
import reactivemongo.api.bson.Macros
case class Person(name: String, surname: String)
implicit val personHandler = Macros.handler[Person]
- See also:
MacroOptions for specific options
MacroConfiguration for extended configuration
Naming strategy, to map each class to a discriminator value.
Naming strategy, to map each class to a discriminator value.
import reactivemongo.api.bson.{ MacroConfiguration, TypeNaming }
val cfg1 = MacroConfiguration(typeNaming = TypeNaming.FullName)
val cfg2 = MacroConfiguration(typeNaming = TypeNaming.FullName)
val cfg3 = MacroConfiguration(
typeNaming = TypeNaming { (cls: Class[_]) =>
"_" + cls.getSimpleName
})
- See also:
- Companion:
- object
Type level evidence that type A
is not type B
.
Type level evidence that type A
is not type B
.
- Companion:
- object
Inherited classlikes
- Inherited from:
- LowPriority1BSONHandlers
Value members
Concrete methods
Returns an empty array.
Returns an empty array.
import reactivemongo.api.bson._
val arr1 = BSONString("bar") +: array // [ 'bar' ]
val arr2 = BSONInteger(1) +: arr1 // [ 1, 'bar' ]
Returns an array with given values.
Returns an array with given values.
import reactivemongo.api.bson._
val arr = array("bar", 1L) // [ 'bar', NumberLong(1) ]
Returns an empty document.
Returns an empty document.
import reactivemongo.api.bson._
val doc = document ++ ("foo" -> 1)
// { 'foo': 1 }
Returns a document with given elements.
Returns a document with given elements.
import reactivemongo.api.bson._
val doc = document("foo" -> 1)
// { 'foo': 1 }
Inherited methods
Inherited fields
Givens
Inherited givens
- Inherited from:
- LowPriority1BSONHandlers
Implicits
Implicits
Inherited implicits
- Inherited from:
- LowPriority1BSONHandlers