You are browsing a version that has not yet been released. |
Find and Modify
From MongoDB.org: MongoDB supports a "find, modify, and return" command. This command can be used to atomically modify a document (at most one) and return it. Note that, by default, the document returned will not include the modifications made on the update. |
Doctrine fully integrates the find and modify functionality to the query builder object so you can easily run these types of queries!
Update
For example you can update a job and return it:
1 <?php
$job = $dm->createQueryBuilder(Job::class)
// Find the job
->findAndUpdate()
->field('in_progress')->equals(false)
->sort('priority', 'desc')
// Update found job
->field('started')->set(new \MongoDB\BSON\UTCDateTime())
->field('in_progress')->set(true)
->getQuery()
->execute();
2
3
4
5
6
7
8
9
10
11
12
13
If you want to update a job and return the new document you can
call the returnNew()
method.
Here is an example where we return the new updated job document:
1 <?php
$job = $dm->createQueryBuilder(Job::class)
// Find the job
->findAndUpdate()
->returnNew()
->field('in_progress')->equals(false)
->sort('priority', 'desc')
// Update found job
->field('started')->set(new \MongoDB\BSON\UTCDateTime())
->field('in_progress')->set(true)
->getQuery()
->execute();
2
3
4
5
6
7
8
9
10
11
12
13
The returned $job
will be a managed Job
instance with the
started
and in_progress
fields updated.
Remove
You can also remove a document and return it:
You can read more about the find and modify functionality on the MongoDB website.
If you don't need to return the document, you can use just run a normal update which can
affect multiple documents, as well. For multiple update to happen you need to use
|