Skip to content

DOCSP-35975: Update many usage example #2836

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Apr 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions docs/includes/usage-examples/UpdateManyTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?php

declare(strict_types=1);

namespace App\Http\Controllers;

use App\Models\Movie;
use MongoDB\Laravel\Tests\TestCase;

class UpdateManyTest extends TestCase
{
/**
* @runInSeparateProcess
* @preserveGlobalState disabled
*/
public function testUpdateMany(): void
{
require_once __DIR__ . '/Movie.php';

Movie::truncate();
Movie::insert([
[
'title' => 'Hollywood',
'imdb' => [
'rating' => 9.1,
'votes' => 511,
],
],
[
'title' => 'The Shawshank Redemption',
'imdb' => [
'rating' => 9.3,
'votes' => 1513145,
],
],
]);

// begin-update-many
$updates = Movie::where('imdb.rating', '>', 9.0)
->update(['acclaimed' => true]);

echo 'Updated documents: ' . $updates;
// end-update-many

$this->assertEquals(2, $updates);
$this->expectOutputString('Updated documents: 2');
}
}
3 changes: 2 additions & 1 deletion docs/usage-examples.txt
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,10 @@ calls the controller function and returns the result to a web interface.
:maxdepth: 1

/usage-examples/findOne
/usage-examples/insertOne
/usage-examples/insertMany
/usage-examples/updateOne
/usage-examples/insertOne
/usage-examples/updateMany
/usage-examples/deleteOne
/usage-examples/deleteMany
/usage-examples/count
Expand Down
1 change: 1 addition & 0 deletions docs/usage-examples/deleteOne.txt
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ This usage example performs the following actions:
- Uses the ``Movie`` Eloquent model to represent the ``movies`` collection in the
``sample_mflix`` database
- Deletes a document from the ``movies`` collection that matches a query filter
- Prints the number of deleted documents

The example calls the following methods on the ``Movie`` model:

Expand Down
5 changes: 3 additions & 2 deletions docs/usage-examples/findOne.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@ Example
This usage example performs the following actions:

- Uses the ``Movie`` Eloquent model to represent the ``movies`` collection in the
``sample_mflix`` database.
- Retrieves a document from the ``movies`` collection that matches a query filter.
``sample_mflix`` database
- Retrieves a document from the ``movies`` collection that matches a query filter
- Prints the retrieved document

The example calls the following methods on the ``Movie`` model:

Expand Down
67 changes: 67 additions & 0 deletions docs/usage-examples/updateMany.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
.. _laravel-update-one-usage:

=========================
Update Multiple Documents
=========================

.. facet::
:name: genre
:values: reference

.. meta::
:keywords: update many, modify, code example

.. contents:: On this page
:local:
:backlinks: none
:depth: 1
:class: singlecol

You can update multiple documents in a collection by calling the ``update()`` method
on a query builder.

Pass a query filter to the ``where()`` method to retrieve documents that meet a
set of criteria. Then, update the matching documents by passing your intended
document changes to the ``update()`` method.

Example
-------

This usage example performs the following actions:

- Uses the ``Movie`` Eloquent model to represent the ``movies`` collection in the
``sample_mflix`` database
- Updates documents from the ``movies`` collection that match a query filter
Comment on lines +32 to +34
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar to prior feedback, I think printing the output should be mentioned or the code that prints should be hidden.

- Prints the number of updated documents

The example calls the following methods on the ``Movie`` model:

- ``where()``: matches documents in which the value of the ``imdb.rating`` nested field
is greater than ``9``.
- ``update()``: updates the matching documents by adding an ``acclaimed`` field and setting
its value to ``true``. This method returns the number of documents that were successfully
updated.

.. io-code-block::
:copyable: true

.. input:: ../includes/usage-examples/UpdateManyTest.php
:start-after: begin-update-many
:end-before: end-update-many
:language: php
:dedent:

.. output::
:language: console
:visible: false

Updated documents: 20

To learn how to edit your Laravel application to run the usage example, see the
:ref:`Usage Examples landing page <laravel-usage-examples>`.

.. tip::

To learn more about updating data with {+odm-short+}, see the :ref:`laravel-fundamentals-modify-documents`
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: since this links to a section of the Write operations page, this PR will be merged after #2808

section of the Write Operations guide.

5 changes: 3 additions & 2 deletions docs/usage-examples/updateOne.txt
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,9 @@ Example
This usage example performs the following actions:

- Uses the ``Movie`` Eloquent model to represent the ``movies`` collection in the
``sample_mflix`` database.
- Updates a document from the ``movies`` collection that matches a query filter.
``sample_mflix`` database
- Updates a document from the ``movies`` collection that matches a query filter
- Prints the number of updated documents

The example calls the following methods on the ``Movie`` model:

Expand Down