From 5fdf4822677f8d2fa9881290864fed174a987d83 Mon Sep 17 00:00:00 2001 From: Jeremy Mikola Date: Thu, 3 Oct 2019 12:06:25 -0400 Subject: [PATCH] Revise Collection API section in upgrade guide Replaced DBRef section with references to BSON class table footnotes. Re-ordered sections in order of importance (group helper is least relevant). Removes RST syntax for save flowchart image, which did not appear to work properly and also isn't necessary. --- docs/images/save-flowchart.png | Bin 47851 -> 0 bytes docs/upgrade.txt | 135 +++++++++++++++------------------ 2 files changed, 63 insertions(+), 72 deletions(-) delete mode 100644 docs/images/save-flowchart.png diff --git a/docs/images/save-flowchart.png b/docs/images/save-flowchart.png deleted file mode 100644 index 45e7b764bd4a5635b3606be97df1cbecf225e5df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47851 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

cx~}OZhVr}^x~PEF)6jk+ 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 diff --git a/docs/upgrade.txt b/docs/upgrade.txt index 564834b41..d783f13ae 100644 --- a/docs/upgrade.txt +++ b/docs/upgrade.txt @@ -7,7 +7,7 @@ Upgrade Guide .. contents:: On this page :local: :backlinks: none - :depth: 1 + :depth: 2 :class: singlecol Overview @@ -119,14 +119,23 @@ new specifications, the new class provides the same functionality as the legacy driver's :php:`MongoCollection ` class with some notable exceptions. -Old and New Methods -~~~~~~~~~~~~~~~~~~~ +A guiding principle in designing the new APIs was that explicit method names are +preferable to overloaded terms found in the old API. For instance, +:php:`MongoCollection::save() ` and +:php:`MongoCollection::findAndModify() ` +have different modes of operation, depending on their arguments. Methods were +also split to distinguish between :manual:`updating specific fields +` and :manual:`full-document replacement +`. + +The following table lists all legacy methods alongside the +equivalent method(s) in the new driver. .. list-table:: :header-rows: 1 - * - :php:`MongoCollection ` - - :phpclass:`MongoDB\\Collection` + * - :php:`MongoCollection ` method + - :phpclass:`MongoDB\\Collection` method(s) * - :php:`MongoCollection::aggregate() ` - :phpmethod:`MongoDB\\Collection::aggregate()` @@ -141,7 +150,7 @@ Old and New Methods - :phpmethod:`MongoDB\\Collection::count()` * - :php:`MongoCollection::createDBRef() ` - - Not yet implemented. See :issue:`PHPLIB-24`. + - Not yet implemented. [3]_ * - :php:`MongoCollection::createIndex() ` - :phpmethod:`MongoDB\\Collection::createIndex()` @@ -173,7 +182,7 @@ Old and New Methods - :phpmethod:`MongoDB\\Collection::findOne()` * - :php:`MongoCollection::getDBRef() ` - - Not implemented. See :issue:`PHPLIB-24`. + - Not implemented. [3]_ * - :php:`MongoCollection::getIndexInfo() ` - :phpmethod:`MongoDB\\Collection::listIndexes()` @@ -191,7 +200,8 @@ Old and New Methods - Not implemented. * - :php:`MongoCollection::group() ` - - Not implemented. Use :phpmethod:`MongoDB\\Database::command()`. + - Not implemented. Use :phpmethod:`MongoDB\\Database::command()`. See + `Group Command Helper`_ for an example. * - :php:`MongoCollection::insert() ` - :phpmethod:`MongoDB\\Collection::insertOne()` @@ -209,13 +219,13 @@ Old and New Methods option. * - :php:`MongoCollection::setReadPreference() ` - - Not implemented. Use :phpmethod:`MongoDB\\Collection::withOptions()` + - Not implemented. Use :phpmethod:`MongoDB\\Collection::withOptions()`. * - :php:`MongoCollection::setSlaveOkay() ` - Not implemented. * - :php:`MongoCollection::setWriteConcern() ` - - Not implemented. Use :phpmethod:`MongoDB\\Collection::withOptions()` + - Not implemented. Use :phpmethod:`MongoDB\\Collection::withOptions()`. * - :php:`MongoCollection::update() ` - :phpmethod:`MongoDB\\Collection::replaceOne()`, @@ -225,67 +235,6 @@ Old and New Methods * - :php:`MongoCollection::validate() ` - Not implemented. -A guiding principle in designing the new APIs was that explicit method names are -preferable to overloaded terms found in the old API. For instance, -:php:`MongoCollection::save() ` and -:php:`MongoCollection::findAndModify() ` -have different modes of operation, depending on their arguments. Methods were -also split to distinguish between :manual:`updating specific fields -` and :manual:`full-document replacement -`. - -Group Command Helper --------------------- - -:phpclass:`MongoDB\\Collection` does have a helper method for the -:manual:`group ` command; The following example -demonstrates how to execute a group command using the -:phpmethod:`MongoDB\\Database::command()` method: - -.. code-block:: php - - selectDatabase('db_name'); - $cursor = $database->command([ - 'group' => [ - 'ns' => 'collection_name', - 'key' => ['field_name' => 1], - 'initial' => ['total' => 0], - '$reduce' => new MongoDB\BSON\Javascript('...'), - ], - ]); - - $resultDocument = $cursor->toArray()[0]; - -DBRef Helpers -------------- - -:phpclass:`MongoDB\\Collection` does not yet have helper methods for working -with :manual:`DBRef ` objects; however, that is -planned in :issue:`PHPLIB-24`. - -MongoCollection::save() Removed -------------------------------- - -:php:`MongoCollection::save() `, which was syntactic sugar -for an insert or upsert operation, has been removed in favor of explicitly using -:phpmethod:`MongoDB\\Collection::insertOne` or -:phpmethod:`MongoDB\\Collection::replaceOne` (with the ``upsert`` option). - -.. .. figure:: /images/save-flowchart.png -.. :alt: save() flowchart - -While the ``save`` method does have its uses for interactive environments, such -as the mongo shell, it was intentionally excluded from the `CRUD specification -`_ -for language drivers. Generally, application code should know if the document -has an identifier and be able to explicitly insert or replace the document and -handle the returned :phpclass:`MongoDB\\InsertOneResult` or -:phpclass:`MongoDB\\UpdateResult`, respectively. This also helps avoid -inadvertent and potentially dangerous :manual:`full-document replacements -`. - Accessing IDs of Inserted Documents ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -310,10 +259,52 @@ following methods on the write result objects: :phpmethod:`MongoDB\\Collection::bulkWrite()` Bulk Write Operations ---------------------- +~~~~~~~~~~~~~~~~~~~~~ The legacy driver's :php:`MongoWriteBatch ` classes have been replaced with a general-purpose :phpmethod:`MongoDB\\Collection::bulkWrite()` method. Whereas the legacy driver only allowed bulk operations of the same type, the new method allows operations to be mixed (e.g. inserts, updates, and deletes). + +MongoCollection::save() Removed +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +:php:`MongoCollection::save() `, which was syntactic sugar +for an insert or upsert operation, has been removed in favor of explicitly using +:phpmethod:`MongoDB\\Collection::insertOne` or +:phpmethod:`MongoDB\\Collection::replaceOne` (with the ``upsert`` option). + +While the ``save`` method does have its uses for interactive environments, such +as the ``mongo`` shell, it was intentionally excluded from the +`CRUD specification `_ +for language drivers. Generally, application code should know if the document +has an identifier and be able to explicitly insert or replace the document and +handle the returned :phpclass:`MongoDB\\InsertOneResult` or +:phpclass:`MongoDB\\UpdateResult`, respectively. This also helps avoid +inadvertent and potentially dangerous :manual:`full-document replacements +`. + +Group Command Helper +~~~~~~~~~~~~~~~~~~~~ + +:phpclass:`MongoDB\\Collection` does have a helper method for the +:manual:`group ` command. The following example +demonstrates how to execute a group command using the +:phpmethod:`MongoDB\\Database::command()` method: + +.. code-block:: php + + selectDatabase('db_name'); + $cursor = $database->command([ + 'group' => [ + 'ns' => 'collection_name', + 'key' => ['field_name' => 1], + 'initial' => ['total' => 0], + '$reduce' => new MongoDB\BSON\Javascript('...'), + ], + ]); + + $resultDocument = $cursor->toArray()[0];