phpman > perldoc > MongoDB::Upgrading(3pm)

Markdown | JSON | MCP    

NAME
    MongoDB::Upgrading - Deprecations and behavior changes from v1 to v2

VERSION
    version v2.2.2

DESCRIPTION
    The v2 driver represents an evolutionary rather than revolutionary release, but with enough
    differences to justify a major version bump.

    The most significant change in v2 is a switch away from the embedded BSON encoder/decoder to an
    external library, BSON and an optional optimization addon, BSON::XS. Many applications will
    continue to work unmodified, but some may need changes.

    This document is intended to help developers update their code to take into account API changes
    from the v1 driver to the v2 driver.

RATIONALE
    API Changes are never something to do lightly. Changes in the v2 driver were deemed necessary to
    achieve certain goals, all of which echo themes of the v1 driver release:

    *   consistency – particularly with regards to Perl <-> BSON data conversion, the v2 driver
        provides a complete, consistently-designed set of BSON type wrappers, and significantly
        improved round-trip capabilities.

    *   server compatibility – as the MongoDB server deprecates or removes functionality, the driver
        must be updated to match so that users don't develop apps around features that are going
        away.

    *   portability – the switch to an external library that has both pure-Perl and XS optimized
        versions allows the MongoDB driver to support environments without a C compiler available.

INSTALLATION AND DEPENDENCY CHANGES
  Installing v2 over v1
    Because the v2 driver is pure-Perl capable (see below), its Perl installation directory is
    different. If upgrading, you need to be sure that the old version doesn't shadow the new one.

    That's easy with "cpanm":

        cpanm --uninst-shadows MongoDB

    For the traditional CPAN client, you'll need to configure the "make_install_arg" config argument
    like this:

        $ perl -MCPAN -e shell
        cpan> o conf make_install_arg UNINST=1
        cpan> o conf commit
        cpan> install MongoDB

  BSON library
    The MongoDB driver uses a newer version of the BSON library. Previously, BSON was already
    required for BSON::Decimal128, so this is a version bump rather than an entirely new dependency.

  Minimum Perl version
    The MongoDB driver now requires Perl v5.10.1 or later. This provides better pure-Perl support,
    several core dependencies, and many fewer bugs involving Unicode and threads. While threads are
    discouraged, threads under Perl v5.8 were so broken that driver tests were regularly failing.

  Pure-perl capable
    The MongoDB driver can now be installed without needing a compiler. If a compiler is detected,
    additional XS-based dependencies will be added to the prerequisites list for improved
    performance. You can also specify "PUREPERL_ONLY=1" as a "Makefile.PL" argument to disable
    compiler detection.

BSON BEHAVIOR CHANGES
    For detailed information on handling MongoDB data types in Perl, see MongoDB::DataTypes. The
    following sections provide an overview of major changes from past versions.

  MongoDB::BSON is removed
    Code that customized behavior by instantiating this class will need to use BSON instead. Options
    are generally similar, though BSON provides much more flexibility.

  New type wrapper classes
    The BSON module provides a complete set of classes mapping to every BSON type. When decoding,
    these types will be returned for types that don't map by default to Perl types.

    Code that uses "ref" to check documents returned from the database for legacy types (e.g.
    MongoDB::BSON::Regexp) will need to be updated for the new type wrappers.

  Legacy type wrappers
    All the legacy type wrappers have been updated to be subclasses of their corresponding BSON
    library equivalents. For example, MongoDB::BSON::Regexp is a subclass of BSON::Regex. Most of
    them are empty subclasses -- the BSON-library versions provide the same API -- but some have
    some additional constructor argument behaviors for backwards compatibility.

    The BSON library knows how to encode legacy types, so code that uses legacy types for encoding
    values should be able to work without modification.

    The legacy type wrappers will be removed in a future major version release of the driver.

  Default date type decoding
    The legacy driver defaulted to decoding the BSON date type as a DateTime object. Unfortunately,
    that type is very heavy-weight and slow to construct; it's a poor choice as a default as it
    inflicts that cost whether or not users ultimately need or want objects of that type.

    The previously-deprecated "dt_type" configuration argument has been removed from
    MongoDB::MongoClient and the default date type of the BSON library is BSON::Time, which is
    extremely lightweight and provides convenience methods to convert to various popular time
    classes. It also works well with Time::HiRes for recording datetimes with millisecond precision.

    Code that relied on date types being DateTime objects will need to convert via the "as_datetime"
    method of BSON::Time.

  More consistent string/number heuristics
    Depending on their history of use, non-reference Perl scalars may have both string and number
    representations internally and the MongoDB driver wasn't always clear on how it treated them.
    Moreover, this treatment could vary slightly by Perl version. The heuristics are now
    standardized as follows:

    *   If the value has a valid double representation, it will be encoded to BSON as a double.

    *   Otherwise, if the value has a valid integer interpretation, it will be encoded as either
        Int32 or Int64; the smallest type that the value fits will be used; a value that overflows
        will error.

    *   Otherwise, the value will be encoded as a UTF-8 string.

    The BSON library provides the "prefer_numeric" attribute to more aggressively coerce number-like
    strings that don't already have a numeric representation into a numeric form.

    This is essentially the same as the legacy heuristic but some edge cases have been made
    consistent.

  Type helper functions
    To make it easy to use type wrappers (and to avoid unintentionally using a deprecated one), the
    BSON::Types module has a standard set of type helper functions:

        use BSON::Types ':all';

        $int32    = bson_int32(42);
        $time     = bson_time(); # now
        $ordered  = bson_doc( first => "John", last => "Doe );

NON-BSON BEHAVIOR CHANGES
  run_command requires an ordered document
    The MongoDB database uses the first key of the document provided to "run_command" as the name of
    the command. Due to Perl's hash order randomization, use of a hash reference with more than one
    key as an argument to "run_command" is not reliable. This restriction is now enforced. The
    argument must be a BSON::Doc object, a Tie::IxHash object, an array reference with an even
    number of keys, or a hash reference with a single key.

DEPRECATIONS
  Count method on collections
    The "count" method is deprecated.

    The reasons for this change are as follows:

    *   The performance and correctness characteristics of the "count" method could vary widely
        depending on whether or not a predicate is used.

    *   The "count" method could be incorrect on sharded clusters during document migration between
        shards.

    Many users are unaware of these considerations in the use of "count". As any change to "count"
    could surprise users with unexpected differences in either performance or correctness, the
    "count" method has been replaced with two new API methods, which more directly convey
    performance and correctness expectations:

    *   "estimated_document_count" takes no predicate; it does not work in transactions; performance
        is O(1).

    *   "count_documents" takes a predicate (even if "empty", meaning count all documents); in can
        be used with or without transactions; performance is O(N) in the worst case.

    NOTE: When upgrading from the deprecated "count" method, some legacy operators are not supported
    and must be replaced:

        +-------------+--------------------------------+
        | Legacy      | Modern Replacement             |
        +=============+================================+
        | $where      | $expr (Requires MongoDB 3.6+)  |
        +-------------+--------------------------------+
        | $near       | $geoWithin with $center        |
        +-------------+--------------------------------+
        | $nearSphere | $geoWithin with $centerSphere  |
        +-------------+--------------------------------+

  Authentication
    The MONGODB-CR authentication mechanism was deprecated in MongoDB server 3.6 and removed in
    MongoDB server 4.0. The Perl driver is deprecating MONGODB-CR, but will not remove it until it
    no longer supports older servers.

  Query options
    The following query options are deprecated:

    *   maxScan -- deprecated in MongoDB server 4.0

    *   modifiers -- the old "$" prefixed modifiers have been replaced with explicit, equivalent
        options for "find"

    *   snapshot -- deprecated in MongoDB server 4.0

  MD5 checksum for GridFS files
    The "md5" field of GridFS documents is deprecated. Use of a checksum like MD5 has been redundant
    since MongoDB added write concern and MD5 itself is no longer considered a secure digest
    function. A future release will remove the use of MD5 entirely. In the meantime, users can
    disable MD5 digesting with the "disable_md5" option in MongoDB::GridFSBucket.

    Users who wish to continue storing a digest are encouraged to compute their own digest using a
    function of their choice and store it under a user-defined key in the "metadata" field of the
    file document.

  Classes
    These classes are superseded by type wrappers from BSON, as described earlier.

    *   MongoDB::BSON::Binary

    *   MongoDB::BSON::Regexp

    *   MongoDB::Code

    *   MongoDB::DBRef

    *   MongoDB::OID

    *   MongoDB::Timestamp

REMOVED FEATURES
    Features deprecated in the v1 release have now been removed. Additionally, "MongoDB::BSON" has
    been removed in favor of BSON, as described earlier.

  Configuration options
    *   "dt_type"

    *   "query_timeout"

    *   "sasl"

    *   "sasl_mechanism"

    *   "timeout"

    *   $MongoDB::BSON::char

    *   $MongoDB::BSON::looks_like_number

  Classes
    *   "MongoDB::BSON"

    *   "MongoDB::GridFS"

    *   "MongoDB::GridFS::File"

  Functions/Methods
    *   From "MongoDB" - "force_double", "force_int"

    *   From "MongoDB::BulkWrite" and "MongoDB::BulkWriteView" - "insert", "update", "remove",
        "remove_one"

    *   From "MongoDB::Collection" - "insert", "batch_insert", "remove", "update", "save", "query",
        "find_and_modify", "get_collection", "ensure_index", "drop_indexes", "drop_index",
        "get_index", "validate"

    *   From "MongoDB::Database" - "eval", "last_error", "get_gridfs"

    *   From "MongoDB::CommandResult" - "result"

    *   From "MongoDB::Cursor" - "slave_okay", "count"

AUTHORS
    *   David Golden <david AT mongodb.com>

    *   Rassi <rassi AT mongodb.com>

    *   Mike Friedman <friedo AT friedo.com>

    *   Kristina Chodorow <k.chodorow AT gmail.com>

    *   Florian Ragwitz <rafl AT debian.org>

COPYRIGHT AND LICENSE
    This software is Copyright (c) 2020 by MongoDB, Inc.

    This is free software, licensed under:

      The Apache License, Version 2.0, January 2004

MongoDB::Upgrading(3pm)
NAME VERSION DESCRIPTION RATIONALE INSTALLATION AND DEPENDENCY CHANGES
Installing v2 over v1 Minimum Perl version Pure-perl capable
BSON BEHAVIOR CHANGES
New type wrapper classes Legacy type wrappers Default date type decoding Type helper functions
NON-BSON BEHAVIOR CHANGES DEPRECATIONS
Count method on collections Authentication Query options Classes
REMOVED FEATURES
Configuration options Classes
AUTHORS COPYRIGHT AND LICENSE

Generated by phpman v3.7.12 Author: Che Dong Under GNU General Public License
2026-06-13 14:45 @216.73.216.28
CrawledBy Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
Valid XHTML 1.0 TransitionalValid CSS!

^_back to top