Skip to content

Commit 46b471f

Browse files
authored
Merge pull request #549 from shuangela/DOCSP-51805-bson-raw
DOCSP-51805-bson-raw
2 parents 301b107 + ecb45f0 commit 46b471f

File tree

1 file changed

+55
-3
lines changed

1 file changed

+55
-3
lines changed

source/fundamentals/bson.txt

Lines changed: 55 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -348,11 +348,63 @@ user-defined struct by using methods from the ``bson`` package:
348348
You can use the ``Raw`` type to retrieve elements from a BSON
349349
document byte slice without unmarshalling it to a Go type. This type
350350
allows you to look up individual elements without unmarshalling
351-
the entire BSON document.
351+
the entire BSON document. For more information about how to use the ``Raw`` type, see
352+
the :ref:`golang-bson-raw` section.
352353

353354
To learn more about the marshalling and unmarshalling methods used with the
354-
``Cursor`` type, see the `Cursor API documentation <{+api+}/mongo#Cursor>`__
355+
``Cursor`` type, see the `Cursor API documentation <{+api+}/mongo#Cursor>`__.
355356

356357
To learn more about the marshalling and unmarshalling methods in the
357358
``bson`` package, see the `bson API documentation
358-
<{+api+}/bson#hdr-Marshalling_and_Unmarshalling>`_
359+
<{+api+}/bson#hdr-Marshalling_and_Unmarshalling>`_.
360+
361+
.. _golang-bson-raw:
362+
363+
Work with Raw BSON Data
364+
-----------------------
365+
366+
The {+driver-short+} supports working with raw BSON documents through the ``Raw`` type. The ``Raw``
367+
type allows you to validate and retrieve elements from a slice of bytes without unmarshalling
368+
the entire BSON document. This is useful in the following situations:
369+
370+
- Performing lookups on specific fields without converting the entire document
371+
- Reducing memory overhead by avoiding full document unmarshalling
372+
- Working directly with binary BSON data received from the database
373+
374+
The ``Raw`` type provides methods to validate the BSON document and look up individual
375+
elements by their keys. The following example demonstrates how to validate a raw BSON document and retrieve
376+
a specific field from it:
377+
378+
.. io-code-block::
379+
:copyable: true
380+
381+
.. input::
382+
:language: go
383+
384+
collection := client.Database("sample_restaurants").Collection("restaurants")
385+
findOptions := options.FindOne()
386+
var raw bson.Raw
387+
err = collection.FindOne(
388+
context.TODO(),
389+
bson.D{{"name", "Mongo's Pizza"}},
390+
findOptions,
391+
).Decode(&raw)
392+
if err != nil {
393+
log.Fatalf("Failed to find document: %v", err)
394+
}
395+
396+
// Print the document type
397+
fmt.Printf("Document type: %T\n", raw)
398+
399+
// Access a field from the raw document
400+
name := raw.Lookup("name").StringValue()
401+
fmt.Println("Restaurant name:", name)
402+
403+
.. output::
404+
:language: none
405+
:visible: false
406+
407+
Document type: bson.Raw
408+
Restaurant name: Mongo's Pizza
409+
410+
To learn more about the ``Raw`` family of types, see the `Raw BSON API documentation <{+api+}/bson#hdr-Raw_BSON>`__.

0 commit comments

Comments
 (0)