@@ -18,12 +18,11 @@ MongoDB Java Driver.
18
18
19
19
.. note:: Improved Bulk Write Commands
20
20
21
- In {+driver-short+} version 5.3 and later, you can use the
22
- ``ClientNamespacedWriteModel`` object to represent the write
23
- operations. See the :ref:`improved-bulk-write` section below
24
- to see how to use this object.
25
-
26
- <TODO: REWORD THis to focus on the bulkWrite function>
21
+ The first half of this guide focuses on the ``MongoCollection.bulkWrite()``
22
+ method. In {+mdb-server+} version 8.0 and {+driver-short+} version 5.3 and later,
23
+ you can use an improved ``MongoClient.bulkWrite()`` method which can write
24
+ to multiple databases and collections at once. See the :ref:`improved-bulk-write`
25
+ section below to learn how to use the new method.
27
26
28
27
To perform a create, replace, update, or delete operation,
29
28
use its corresponding method. For example, to insert one document,
@@ -307,55 +306,98 @@ see the following API Documentation:
307
306
Improved Bulk Write Command
308
307
---------------------------
309
308
310
- .. specify which library
309
+ Starting with {+mdb-server+} version 8.0 and {+driver-short+} version 5.3, there
310
+ is an improved bulk write method, ``MongoClient.bulkWrite()``, that can be used
311
+ to write to different databases and collections in the same cluster.
311
312
312
- Starting with {+mdb-server+} version 8.0 and {+driver-short+} version 5.3, the
313
- ``bulkWrite()`` method can be used in a different way. There are four ways in
314
- which you can call this method:
313
+ In the previous examples on this page, the ``bulkWrite()`` method takes a list
314
+ of ``WriteModel`` documents. The specified subclass of ``WriteModel`` represents
315
+ the corresponding write operation. For example, ``InsertOneModel`` represents
316
+ inserting one document. Similarly, the new ``bulkWrite()`` method takes a
317
+ list of ``ClientNamespacedWriteModel`` objects to represent the write operation.
318
+ However, you do not need to specify the subclass that represents the corresponding
319
+ write operation. Instead, the ``ClientNamespacedWriteModel`` object contains different
320
+ methods to represent different write operations, such as ``insertOne()`` or
321
+ ``updateOne()``. These methods take a ``MongoNamespace object that defines which
322
+ database and collection to write to and a ``Document`` object that defines the
323
+ document information. Some methods, such as ``updateOne()`` and ``replaceOne()``,
324
+ also take a ``filter`` object.
325
+
326
+ The following sections describe how to use the new ``bulkWrite()`` method.
327
+
328
+ Insert Example
329
+ ~~~~~~~~~~~~~~
330
+
331
+ The following example shows how to use the new ``bulkWrite()`` method to insert
332
+ two documents. One document is inserted into the ``people`` collection in our
333
+ database. The other document is inserted into a collection called ``things``.
334
+ We use the ``MongoNamespace`` object to define the database and collection we
335
+ want each write operation to be applied to.
315
336
316
- .. TODO: describe how these can be used to write to different collections at
317
- .. the same time
337
+ .. code-block:: java
318
338
319
- .. TODO: Namespace vs not namespace write model
339
+ MongoNamespace peopleNamespace = new MongoNamespace("db", "people");
340
+ MongoNamespace thingsNamespace = new MongoNamespace("db", "things");
320
341
321
- bulkWrite(models)
322
- ~~~~~~~~~~~~~~~~~
342
+ ClientBulkWriteResult result = client.bulkWrite(List<>(
343
+ ClientNamespacedWriteModel.insertOne(peopleNamespace, new Document("name", "Julia Smith")),
344
+ ClientNamespacedWriteModel.insertOne(thingsNamespace, new Document("object", "washing machine"))
345
+ ));
323
346
324
- In the previous examples on this page, the ``bulkWrite()`` method takes a list
325
- of ``WriteModel`` documents. In these examples, the specified subclass of
326
- ``WriteModel`` represents the corresponding write operation, like ``InsertOneModel``
327
- represents inserting one document.
347
+ After this example is executed, the ``people`` collection holds a
348
+ ``{ "name": "Julia Smith" }`` document and the ``things`` collection holds
349
+ a ``{ "object": "washing machine" }`` document.
350
+
351
+ .. TODO: link documentation
328
352
329
- Now, ``bulkWrite()`` can take a list of ``ClientWriteModel`` objects. Instead
330
- of having to specify different subclasses, this object has different methods to
331
- represent different write operations, such as ``insertOne()`` or ``updateOne()``.
332
- These methods take a ``MongoNamespace`` object that defines which database and
333
- collection to write to and a ``Document`` object that defines the document.
353
+ Replace Example
354
+ ~~~~~~~~~~~~~~~
334
355
335
- The following example shows how to use ``ClientWriteModel`` to insert two documents
336
- into the ``people`` collection of our database:
356
+ The following example shows how to use the ``bulkWrite()`` method to replace an
357
+ existing document in the ``people`` collection and an existing document in the
358
+ ``things`` collection.
337
359
338
360
.. code-block:: java
339
- MongoNamespace namespace = new MongoNamespace("db", "people");
361
+
362
+ MongoNamespace peopleNamespace = new MongoNamespace("db", "people");
363
+ MongoNamespace thingsNamespace = new MongoNamespace("db", "things");
340
364
341
365
ClientBulkWriteResult result = client.bulkWrite(List<>(
342
- ClientNamespacedWriteModel.insertOne(namespace, new Document("name", "Julia Smith")),
343
- ClientNamespacedWriteModel.insertOne(namespace, new Document("name", "Blablabla"))
366
+ ClientNamespacedWriteModel.replaceOne(
367
+ peopleNamespace,
368
+ Filters.eq("_id", 1),
369
+ new Document("name", "Maximus Farquaad")
370
+ ),
371
+ ClientNamespacedWriteModel.replaceOne(
372
+ thingsNamespace,
373
+ Filters.eq("_id", 1),
374
+ new Document("object", "potato")
375
+ )
344
376
));
345
377
346
- .. TODO: move code to includes
378
+ After this example is executed, the document in the ``people`` collection in
379
+ which the ``_id`` field has the value of ``1`` has been replaced with a new
380
+ ``{ "name": "Maximus Farquaad" }`` document. Also, the document
381
+ in the ``things`` collection in which the ``_id`` field has the value of ``1``
382
+ has been replaced with a ``{ "object": "potato" }`` document.
347
383
348
- .. TODO: link documentation
384
+ Bulk Write Options
385
+ ~~~~~~~~~~~~~~~~~~
386
+
387
+ Similarly to the :ref:`orderOfExecution` section above, you can use the
388
+ ``ClientBulkWriteOptions`` object to execute the new ``bulkWrite()`` method
389
+ with options.
349
390
350
- bulkWrite(models, options)
351
- ~~~~~~~~~~~~~~~~~~~~~~~~~~
391
+ Order of Execution Example
392
+ ``````````````````````````
352
393
353
- Similarly to the :ref:`orderOfExecution` above, you can use the ``ClientBulkWriteOptions``
354
- object to add options to your call of the new ``bulkWrite()`` method.
394
+ As described in the previous Order of Execution section, by default the write
395
+ operations execute in the order they're specified. However, we can pass
396
+ ``false`` to the ``ordered()`` method on the ``ClientBulkWriteOptions`` object
397
+ to execute write operations in any order.
355
398
356
- As described above, by default the write operations execute in the order they're
357
- specified. However, we can specify ``false`` to the ``ordered()`` method on the
358
- ``ClientBulkWriteOptions`` object to execute write operations in any order.
399
+ The following code shows how to use the ``ordered()`` method on the
400
+ ``ClientBulkWriteOptions`` object.
359
401
360
402
.. code-block:: java
361
403
MongoNamespace namespace = new MongoNamespace("db", "people");
@@ -364,21 +406,19 @@ specified. However, we can specify ``false`` to the ``ordered()`` method on the
364
406
365
407
366
408
ClientBulkWriteResult result = client.bulkWrite(List<>(
367
- ClientNamespacedWriteModel.insertOne(namespace, new Document("name", "Julia Smith ")),
368
- ClientNamespacedWriteModel.insertOne(namespace, new Document("name", "Blablabla "))
409
+ ClientNamespacedWriteModel.insertOne(namespace, new Document("name", "Donkey Kong ")),
410
+ ClientNamespacedWriteModel.insertOne(namespace, new Document("name", "Mario "))
369
411
),
370
412
options);
371
413
372
- .. TODO: add one more example?
373
-
374
414
.. TODO: link documentation
375
415
376
- .. TODO; also results and error types
377
-
378
-
379
416
Summary
380
417
-------
381
418
419
+ ``MongoCollection.bulkWrite()``
420
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
421
+
382
422
To perform a bulk operation, you create and pass a list of
383
423
``WriteModel`` documents to the ``bulkWrite()`` method.
384
424
@@ -392,4 +432,24 @@ There are two ways to execute the ``bulkWrite()`` method:
392
432
- Unordered, which performs all the bulk operations in any order and reports errors
393
433
at the end, if any
394
434
395
- .. TODO: summarize results in a table i think
435
+ ``MongoClient.bulkWrite()``
436
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
437
+
438
+ In {+mdb-server+} version 8.0 and {+driver-short+} version 5.3 and later, you
439
+ can use the ``bulkWrite()`` method to perform bulk operations on multiple
440
+ databases and collections at once.
441
+
442
+ This method uses the ``ClientNamespacedWriteModel`` and its methods
443
+ ``insertOne()``, ``updateOne()``, ``updateMany()``, ``replaceOne()``,
444
+ ``deleteOne()``, and ``deleteMany()``.
445
+
446
+ The method can also take a ``ClientBulkWriteOptions`` object to specify different
447
+ options for how the command is executed.
448
+
449
+ .. TODO: Add API Documentation
450
+
451
+ .. OPEN QUESTIONS FOR ENGINEERING:
452
+ .. Should I include the extraneous types like the Client...Result object?
453
+ .. Should I include the different ClientNamespacedInsertModel... etc?
454
+ .. Is ClientWriteModel being exposed for public use?
455
+ .. Is MongoCollection.bulkWrite() being deprecated?
0 commit comments