bson
– BSON (Binary JSON) Encoding and Decoding¶
BSON (Binary JSON) encoding and decoding.
The mapping from Python types to BSON types is as follows:
Python Type |
BSON Type |
Supported Direction |
---|---|---|
None |
null |
both |
bool |
boolean |
both |
int [1] |
int32 / int64 |
py -> bson |
int64 |
both |
|
float |
number (real) |
both |
str |
string |
both |
list |
array |
both |
dict |
object |
both |
object |
both |
|
object |
py -> bson |
|
object |
both [2] |
|
UTC datetime |
both |
|
UTC datetime |
both [5] |
|
regex |
both |
|
compiled re [7] |
regex |
py -> bson |
binary |
both |
|
binary |
both |
|
oid |
both |
|
dbref |
both |
|
dbpointer |
bson -> py |
|
None |
undefined |
bson -> py |
code |
both |
|
str |
symbol |
bson -> py |
bytes [8] |
binary |
both |
timestamp |
both |
|
decimal128 |
both |
|
min key |
both |
|
max key |
both |
- class bson.BSON¶
BSON (Binary JSON) data.
Warning
Using this class to encode and decode BSON adds a performance cost. For better performance use the module level functions
encode()
anddecode()
instead.- decode(codec_options=(<class 'dict'>, False, 0, 'strict', None, TypeRegistry(type_codecs=[], fallback_encoder=None), DatetimeConversion.DATETIME))¶
Decode this BSON data.
By default, returns a BSON document represented as a Python
dict
. To use a differentMutableMapping
class, configure aCodecOptions
:>>> import collections # From Python standard library. >>> import bson >>> from bson.codec_options import CodecOptions >>> data = bson.BSON.encode({'a': 1}) >>> decoded_doc = bson.BSON(data).decode() <type 'dict'> >>> options = CodecOptions(document_class=collections.OrderedDict) >>> decoded_doc = bson.BSON(data).decode(codec_options=options) >>> type(decoded_doc) <class 'collections.OrderedDict'>
- Parameters:
codec_options (CodecOptions[Any]) – An instance of
CodecOptions
.- Return type:
Changed in version 3.0: Removed compile_re option: PyMongo now always represents BSON regular expressions as
Regex
objects. Usetry_compile()
to attempt to convert from a BSON regular expression to a Python regular expression object.Replaced as_class, tz_aware, and uuid_subtype options with codec_options.
- classmethod encode(document, check_keys=False, codec_options=(<class 'dict'>, False, 0, 'strict', None, TypeRegistry(type_codecs=[], fallback_encoder=None), DatetimeConversion.DATETIME))¶
Encode a document to a new
BSON
instance.A document can be any mapping type (like
dict
).Raises
TypeError
if document is not a mapping type, or contains keys that are not instances ofstr'. Raises :class:`~bson.errors.InvalidDocument
if document cannot be converted toBSON
.- Parameters:
document (Mapping[str, Any]) – mapping type representing a document
check_keys (bool) – check if keys start with ‘$’ or contain ‘.’, raising
InvalidDocument
in either casecodec_options (CodecOptions[Any]) – An instance of
CodecOptions
.
- Return type:
Changed in version 3.0: Replaced uuid_subtype option with codec_options.
- bson.decode(data: _ReadableBuffer, codec_options: None = None) dict[str, Any] ¶
- bson.decode(data: _ReadableBuffer, codec_options: CodecOptions[_DocumentType]) _DocumentType
Decode BSON to a document.
By default, returns a BSON document represented as a Python
dict
. To use a differentMutableMapping
class, configure aCodecOptions
:>>> import collections # From Python standard library. >>> import bson >>> from bson.codec_options import CodecOptions >>> data = bson.encode({'a': 1}) >>> decoded_doc = bson.decode(data) <type 'dict'> >>> options = CodecOptions(document_class=collections.OrderedDict) >>> decoded_doc = bson.decode(data, codec_options=options) >>> type(decoded_doc) <class 'collections.OrderedDict'>
- Parameters:
data – the BSON to decode. Any bytes-like object that implements the buffer protocol.
codec_options – An instance of
CodecOptions
.
Added in version 3.9.
- bson.decode_all(data: _ReadableBuffer, codec_options: None = None) list[dict[str, Any]] ¶
- bson.decode_all(data: _ReadableBuffer, codec_options: CodecOptions[_DocumentType]) list[_DocumentType]
Decode BSON data to multiple documents.
data must be a bytes-like object implementing the buffer protocol that provides concatenated, valid, BSON-encoded documents.
- Parameters:
data – BSON data
codec_options – An instance of
CodecOptions
.
Changed in version 3.9: Supports bytes-like objects that implement the buffer protocol.
Changed in version 3.0: Removed compile_re option: PyMongo now always represents BSON regular expressions as
Regex
objects. Usetry_compile()
to attempt to convert from a BSON regular expression to a Python regular expression object.Replaced as_class, tz_aware, and uuid_subtype options with codec_options.
- bson.decode_file_iter(file_obj: BinaryIO | IO[bytes], codec_options: None = None) Iterator[dict[str, Any]] ¶
- bson.decode_file_iter(file_obj: BinaryIO | IO[bytes], codec_options: CodecOptions[_DocumentType]) Iterator[_DocumentType]
Decode bson data from a file to multiple documents as a generator.
Works similarly to the decode_all function, but reads from the file object in chunks and parses bson in chunks, yielding one document at a time.
- Parameters:
file_obj – A file object containing BSON data.
codec_options – An instance of
CodecOptions
.
Changed in version 3.0: Replaced as_class, tz_aware, and uuid_subtype options with codec_options.
Added in version 2.8.
- bson.decode_iter(data: bytes, codec_options: None = None) Iterator[dict[str, Any]] ¶
- bson.decode_iter(data: bytes, codec_options: CodecOptions[_DocumentType]) Iterator[_DocumentType]
Decode BSON data to multiple documents as a generator.
Works similarly to the decode_all function, but yields one document at a time.
data must be a string of concatenated, valid, BSON-encoded documents.
- Parameters:
data – BSON data
codec_options – An instance of
CodecOptions
.
Changed in version 3.0: Replaced as_class, tz_aware, and uuid_subtype options with codec_options.
Added in version 2.8.
- bson.encode(document, check_keys=False, codec_options=(<class 'dict'>, False, 0, 'strict', None, TypeRegistry(type_codecs=[], fallback_encoder=None), DatetimeConversion.DATETIME))¶
Encode a document to BSON.
A document can be any mapping type (like
dict
).Raises
TypeError
if document is not a mapping type, or contains keys that are not instances ofstr
. RaisesInvalidDocument
if document cannot be converted toBSON
.- Parameters:
document (Mapping[str, Any]) – mapping type representing a document
check_keys (bool) – check if keys start with ‘$’ or contain ‘.’, raising
InvalidDocument
in either casecodec_options (CodecOptions[Any]) – An instance of
CodecOptions
.
- Return type:
Added in version 3.9.
- bson.gen_list_name()¶
Generate “keys” for encoded lists in the sequence b”0", b”1", b”2", …
The first 1000 keys are returned from a pre-built cache. All subsequent keys are generated on the fly.
- bson.is_valid(bson)¶
Check that the given string represents valid
BSON
data.Raises
TypeError
if bson is not an instance ofbytes
. ReturnsTrue
if bson is validBSON
,False
otherwise.
Sub-modules:
binary
– Tools for representing binary data to be stored in MongoDBcode
– Tools for representing JavaScript codecodec_options
– Tools for specifying BSON codec optionsdatetime_ms
– Support for BSON UTC Datetimedbref
– Tools for manipulating DBRefs (references to documents stored in MongoDB)decimal128
– Support for BSON Decimal128errors
– Exceptions raised by thebson
packageint64
– Tools for representing BSON int64json_util
– Tools for using Python’sjson
module with BSON documentsmax_key
– Representation for the MongoDB internal MaxKey typemin_key
– Representation for the MongoDB internal MinKey typeobjectid
– Tools for working with MongoDB ObjectIdsraw_bson
– Tools for representing raw BSON documents.regex
– Tools for representing MongoDB regular expressionsson
– Tools for working with SON, an ordered mappingtimestamp
– Tools for representing MongoDB internal Timestampstz_util
– Utilities for dealing with timezones in Python