@@ -7,7 +7,7 @@ Insert a Document
7
7
.. contents:: On this page
8
8
:local:
9
9
:backlinks: none
10
- :depth: 1
10
+ :depth: 2
11
11
:class: singlecol
12
12
13
13
.. _insert_guide_golang:
@@ -19,9 +19,9 @@ In this guide, you can learn how to **insert** documents into a MongoDB
19
19
collection.
20
20
21
21
Before you can find, update, and delete documents in MongoDB, you need
22
- to insert those documents. Insert operations insert one document using
23
- the ``InsertOne()`` function, or insert multiple documents using one of
24
- the ``InsertMany()`` or ``BulkWrite()`` function .
22
+ to insert those documents. You can insert one document using
23
+ the ``InsertOne()`` function, or insert multiple documents using either
24
+ the ``InsertMany()`` or ``BulkWrite()`` functions .
25
25
26
26
The following sections focus on ``InsertOne()`` and ``InsertMany()``.
27
27
@@ -41,7 +41,7 @@ The two options for managing this field are:
41
41
driver generates unique ``ObjectId`` values for documents that you do
42
42
not explicitly specify an ``_id``.
43
43
44
- Unless you provide strong guarantees for uniqueness, we recommend
44
+ Unless you provide strong guarantees for uniqueness, MongoDB recommends
45
45
you let the driver automatically generate ``_id`` values.
46
46
47
47
.. note::
@@ -85,7 +85,36 @@ The output should look like this:
85
85
.. code-block:: none
86
86
:copyable: false
87
87
88
- Inserted document with _id: ObjectID("6112c7cacf7fb532a9c0077f")
88
+ Inserted document with _id: ObjectID("...")
89
+
90
+ Modify ``InsertOne`` Behavior
91
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
92
+ You can modify the behavior of ``InsertOne()`` by constructing and passing
93
+ an optional ``InsertOneOptions`` struct. The available options to tune with
94
+ ``InsertOneOptions`` are:
95
+
96
+ .. list-table::
97
+ :header-rows: 1
98
+ :stub-columns: 1
99
+ :class: compatibility-large
100
+
101
+ * - Option
102
+ - Description
103
+
104
+ * - ``BypassDocumentValidation``
105
+ - | If ``true``, allows the write to opt-out of :manual:`document level validation </core/schema-validation>`.
106
+
107
+ | Default: ``false``
108
+
109
+ Construct an ``InsertOneOptions`` as follows:
110
+
111
+ .. literalinclude:: /includes/fundamentals/code-snippets/CRUD/insertOptions.go
112
+ :start-after: // begin insertOneOpts
113
+ :end-before: // end insertOneOpts
114
+ :language: go
115
+ :copyable:
116
+ :dedent:
117
+
89
118
90
119
Insert Multiple Documents
91
120
-------------------------
@@ -95,10 +124,84 @@ collection.
95
124
96
125
Upon successful insertion, the ``InsertMany()`` function returns an ``InsertManyResult``
97
126
instance that contains the ``_id`` fields of the inserted documents.
98
- This function inserts documents in the order specified unless an exception
99
- occurs.
100
127
101
- For example, assume you want to insert the following documents:
128
+ Example
129
+ ~~~~~~~
130
+
131
+ The following example creates and inserts some documents into the
132
+ ``favorite_books`` collection using the ``InsertMany()`` function:
133
+
134
+ .. code-block:: go
135
+
136
+ coll := client.Database("myDB").Collection("favorite_books")
137
+ docs := []interface{}{
138
+ bson.D{{"title", "My Brilliant Friend"}, {"author", "Elena Ferrante"}, {"year_published", 2012}},
139
+ bson.D{{"title", "Lucy"}, {"author", "Jamaica Kincaid"}, {"year_published", 2002}},
140
+ bson.D{{"title", "Cat's Cradle"}, {"author", "Kurt Vonnegut Jr."}, {"year_published", 1998}},
141
+ }
142
+
143
+ result, err := coll.InsertMany(context.TODO(), docs)
144
+ list_ids := result.InsertedIDs
145
+ fmt.Printf("Documents inserted: %v\n", len(list_ids))
146
+
147
+ for _, id := range list_ids {
148
+ fmt.Printf("Inserted document with _id: %v\n", id)
149
+ }
150
+
151
+ Your output should look like this:
152
+
153
+ .. code-block:: none
154
+ :copyable: false
155
+
156
+ Documents inserted: 3
157
+ Inserted document with _id: ObjectID("...")
158
+ Inserted document with _id: ObjectID("...")
159
+ Inserted document with _id: ObjectID("...")
160
+
161
+ Modify ``InsertMany`` Behavior
162
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
163
+
164
+ You can modify the behavior of ``InsertMany()`` by constructing
165
+ and passing an optional ``InsertOneOptions`` struct. The available options
166
+ to tune with ``InsertOneOptions`` are:
167
+
168
+ .. list-table::
169
+ :header-rows: 1
170
+ :stub-columns: 1
171
+ :class: compatibility-large
172
+
173
+ * - Option
174
+ - Description
175
+
176
+ * - ``BypassDocumentValidation``
177
+ - | If ``true``, allows the write to opt-out of :manual:`document level validation </core/schema-validation>`.
178
+
179
+ | Default: ``false``
180
+
181
+ * - ``Ordered``
182
+ - | If ``true``, the driver sends documents to the server in the order provided.
183
+ If an error occurs, the driver and server abort all remaining insert operations.
184
+ See the section on :ref:`ordered behavior <ordered_behavior_go>` for more information.
185
+
186
+ | Default: ``false``
187
+
188
+ Construct an ``InsertManyOptions`` as follows:
189
+
190
+ .. literalinclude:: /includes/fundamentals/code-snippets/CRUD/insertOptions.go
191
+ :start-after: // begin insertManyOpts
192
+ :end-before: // end insertManyOpts
193
+ :language: go
194
+ :copyable:
195
+ :dedent:
196
+
197
+
198
+
199
+ .. _ordered_behavior_go:
200
+
201
+ ``Ordered`` Behavior
202
+ ~~~~~~~~~~~~~~~~~~~~
203
+
204
+ Assume you want to insert the following documents:
102
205
103
206
.. code-block:: json
104
207
:copyable: false
@@ -108,9 +211,10 @@ For example, assume you want to insert the following documents:
108
211
{ "_id": 1, "country": "Vietnam" }
109
212
{ "_id": 3, "country": "Argentina" }
110
213
111
- If you attempt to insert these documents, a ``BulkWriteException`` occurs at the
112
- third document because of the repeated ``_id`` value, but the documents
113
- before the error-producing document still get inserted into your collection.
214
+ If you attempt to insert these documents with default ``InsertManyOptions``, a
215
+ ``BulkWriteException`` occurs at the third document because of the repeated
216
+ ``_id`` value, but the documents before the error-producing document still get
217
+ inserted into your collection.
114
218
115
219
.. note::
116
220
@@ -153,38 +257,6 @@ before the error-producing document still get inserted into your collection.
153
257
{ "_id": 1, "country": "Tanzania" }
154
258
{ "_id": 2, "country": "Lithuania" }
155
259
156
- Example
157
- ~~~~~~~
158
-
159
- The following example creates and inserts some documents into the
160
- ``favorite_books`` collection using the ``InsertMany()`` function:
161
-
162
- .. code-block:: go
163
-
164
- coll := client.Database("myDB").Collection("favorite_books")
165
- docs := []interface{}{
166
- bson.D{{"title", "My Brilliant Friend"}, {"author", "Elena Ferrante"}, {"year_published", 2012}},
167
- bson.D{{"title", "Lucy"}, {"author", "Jamaica Kincaid"}, {"year_published", 2002}},
168
- bson.D{{"title", "Cat's Cradle"}, {"author", "Kurt Vonnegut Jr."}, {"year_published", 1998}},
169
- }
170
-
171
- result, err := coll.InsertMany(context.TODO(), docs)
172
- list_ids := result.InsertedIDs
173
- fmt.Printf("Documents inserted: %v\n", len(list_ids))
174
-
175
- for _, id := range list_ids {
176
- fmt.Printf("Inserted document with _id: %v\n", id)
177
- }
178
-
179
- Your output should look like this:
180
-
181
- .. code-block:: none
182
- :copyable: false
183
-
184
- Documents inserted: 3
185
- Inserted document with _id: ObjectID("6112d6a0acf85446f904eb91")
186
- Inserted document with _id: ObjectID("6112d6a0acf85446f904eb92")
187
- Inserted document with _id: ObjectID("6112d6a0acf85446f904eb93")
188
260
189
261
Additional Information
190
262
----------------------
0 commit comments