b17f62d Feb 15, 2017
@kay-kim @i80and @steveren @rkumar-mongo @schmalliso
855 lines (585 sloc) 26.2 KB
Release Notes for MongoDB 3.4
.. default-domain:: mongodb
.. contents:: On this page
:backlinks: none
:depth: 1
:class: twocols
.. admonition:: MongoDB 3.4 Released Nov 29, 2016
MongoDB 3.4 is now available. Key features include linearizable read
concerns, views, and collation.
OpsManager 3.4 is also available. See the `Ops Manager documentation
<>`_ and the `Ops Manager
release notes
for more information.
Minor Releases
.. class:: hidden
.. toctree::
.. _3.4.2-release-notes:
3.4.2 -- Feb 1, 2017
Issues fixed:
- :issue:`SERVER-27125`: Arbiters in pv1 should vote no in elections if
they can see a healthy primary of equal or greater priority to the
- :issue:`SERVER-27584` Add support for filter to listDatabases
- :issue:`WT-2670` Inefficient I/O when read full DB (poor readahead)
- :ref:`3.4.2-changelog`
- `All JIRA issues closed in 3.4.2
.. _3.4.1-release-notes:
3.4.1 -- Dec 20, 2016
Issues fixed:
- :issue:`SERVER-27124`: Disallow ``readConcern: majority`` reads on
replica set protocolVersion 0 (pv0).
- :issue:`SERVER-27201`: $graphLookup triggers null pointer dereference.
- :issue:`SERVER-27207`: Find operation with a sort on a view via
``mongos`` may incorrectly return empty result set.
- :issue:`SERVER-27213`: Two ``$match`` pipeline stages can combine
incorrectly to produce incorrect results.
- :ref:`3.4.1-changelog`
- `All JIRA issues closed in 3.4.1
.. _3.4-rel-notes-sharded-cluster:
Sharded Cluster
Membership Awareness
Starting in 3.4, sharded cluster components (shards, config servers,
:program:`mongos` instances) recognize their membership in a sharded
cluster, including the name of the sharded cluster, the location of the
config servers.
.. COMMENT To DOCS TEAM: Make sure we single source these things since used in relnotes and compatibility
To support this awareness:
- ``shardsvr`` Requirement
For a 3.4 sharded cluster, :program:`mongod` instances for the
shards **must** explicitly specify its role as a ``shardsvr``,
either via the configuration file setting
:setting:`sharding.clusterRole` or via the command line option
.. note::
Default port for :program:`mongod` instances with the ``shardsvr``
role is ``27018``. To use a different port, specify
:setting:`net.port` setting or ``--port`` option.
.. COMMENT To DOCS TEAM: Ensure that in all our sharding tutorials we specify shardsvr.
- 3.4 ``mongos`` Incompatibility with Earlier Versions of ``mongod``
Version 3.4 :program:`mongos` instances cannot connect to
earlier versions of :program:`mongod` instances.
Balancer on Config Server Primary
The balancer process has moved from the :program:`mongos` to the
primary member of the config server replica set. Associated with this
- The primary of the CSRS config server holds the ``"balancer"`` lock,
using a process id named ``"ConfigServer"``, which is never released.
- MongoDB 3.4 adds:
- :dbcommand:`balancerStart` command and updates the 3.4
:program:`mongo` shell method :method:`sh.startBalancer()` to wrap
the new command. A 3.2 or earlier :program:`mongo` shell method
:method:`sh.startBalancer()` is incompatible with a 3.4 sharded
- :dbcommand:`balancerStop` command and updates the 3.4
:program:`mongo` shell method :method:`sh.stopBalancer()` to wrap
the new command. A 3.2 or earlier :program:`mongo` shell method
:method:`sh.stopBalancer()` is incompatible with a 3.4 sharded
- :dbcommand:`balancerStatus` command.
- MongoDB 3.4 deprecates :program:`mongo` shell method
:method:`sh.getBalancerHost()`. A 3.2 or earlier :program:`mongo`
shell method :method:`sh.getBalancerHost()` is incompatible with a
3.4 sharded cluster.
- MongoDB 3.4 removes the following configuration options from the
- :setting:`sharding.chunkSize` configuration file setting and
:option:`--chunkSize` command-line option
- :setting:`sharding.autoSplit` configuration file setting and
:option:`--noAutoSplit` command line option
Faster Balancing
Starting in MongoDB 3.4:
- For :ref:`WiredTiger <storage-wiredtiger>`, the default value
``secondaryThrottle`` is ``false`` for all chunk migrations. The
balancer does not wait for replication to a secondary and instead
continues with the next document.
- MongoDB can perform parallel chunk migrations. Similar to earlier
versions, a shard can participate in at most one migration at a time.
Observing this restriction, for a sharded cluster with *n* shards,
MongoDB can perform at most *n/2* (rounded down) simultaneous chunk
Removal of Support for SCCC Config Servers
3.4 sharded clusters no longer support the use of mirrored (SCCC)
:program:`mongod` instances as config servers. The use of SCCC config
servers, deprecated in the 3.2 release, is no longer valid. Instead,
deploy your config servers as a replica set (CSRS).
To upgrade your sharded cluster to version 3.4, the config servers must
be running as a replica set.
To convert your existing config servers from SCCC to CSRS, see
Sharding Zones
MongoDB 3.4 introduces :doc:`/core/zone-sharding`, which supersedes
tag-aware sharding available in earlier versions.
To support zones, MongoDB introduces the following commands and
:program:`mongo` shell helpers:
.. list-table::
:header-rows: 1
* - Commands
- `mongo` Shell Methods
* - :dbcommand:`addShardToZone`
- :method:`sh.addShardToZone()`
* - :dbcommand:`removeShardFromZone`
- :method:`sh.removeShardFromZone()`
* - :dbcommand:`updateZoneKeyRange`
- | :method:`sh.updateZoneKeyRange()`
| :method:`sh.removeRangeFromZone()`
.. _3.4-replica-set:
Replica Set
Default Journaling Behavior of ``majority`` Write Concern
A new replica set configuration setting
:rsconf:`writeConcernMajorityJournalDefault` determines whether an
acknowledgement for a write concern of :writeconcern:`majority
<"majority">` returns after the majority of the voting members apply
the write in memory or to the on-disk journal *if* the :ref:`j <wc-j>`
option is unspecified in the write concern.
Adjustable Catchup Period for Newly Elected Primary
A new replica set configuration setting
:rsconf:`settings.catchUpTimeoutMillis` defines the time limit for a
newly elected primary to catch up with the other replica set members
that may have more recent writes.
Linearizable Read Concern
MongoDB 3.4 introduces a read concern level of
:readconcern:`"linearizable"` to read data that reflects all successful
writes issued with a :writeconcern:`"majority"` *and* acknowledged
prior to the start of the read operation. Linearizable read concern
guarantees only apply if read operations specify a query filter that
uniquely identifies a single document.
Linearizable read concern is available for all MongoDB supported
:doc:`storage engines </core/storage-engines>`.
Combined with :writeconcern:`"majority"` write concern,
:readconcern:`"linearizable"` read concern enables multiple threads to
perform reads and writes on a single document as if a single thread
performed these operations in real time; that is, the corresponding
schedule for these reads and writes is considered linearizable.
Reads with linearizable read concern may be significantly slower than
reads with :readconcern:`"majority"` or :readconcern:`"local"` read
concerns. Always use ``maxTimeMS`` with linearizable read concern, in
case a majority of data bearing members are unavailable. For example:
.. code-block:: javascript
db.restaurants.find( { _id: 5 } ).readConcern("linearizable").maxTimeMS(10000)
db.runCommand( {
find: "restaurants",
filter: { _id: 5 },
readConcern: { level: "linearizable" },
maxTimeMS: 10000
} )
For more information on read concern, including operations that support
read concerns, see :doc:`/reference/read-concern`.
Improved Initial Sync
- MongoDB 3.4 improves the performance of :ref:`initial sync
<replica-set-initial-sync>` by having initial sync build the indexes
as the documents are copied.
- MongoDB 3.4 improves the :ref:`initial sync retry logic
<init-sync-retry>` to be more resilient to intermittent failures on
the network.
- Modified :ref:`rs.status() output <rs-status-output>` to report on
initial sync status and progress.
.. _3.4-decimal:
Decimal Type
3.4 adds support for the `decimal128 format
<>`_ with
the new ``decimal`` data type. The decimal128 format supports numbers with
up to 34 decimal digits (i.e. significant digits) and an exponent range
of −6143 to +6144.
To support the format, the :program:`mongo` shell adds the
:ref:`NumberDecimal <shell-type-decimal>` wrapper.
.. code-block:: javascript
db.inventory.insert( {_id: 1, item: "The Scream", price: NumberDecimal("9.99"), quantity: 4 } )
When performing :ref:`comparisons <bson-types-comparison-order>` among
different numerical types, MongoDB performs comparison on the exact
stored numerical values without first converting values to a common
Unlike the ``double`` data type, which only stores an approximation of
the decimal values, the ``decimal`` data type stores the exact value.
For example, a ``decimal`` ``NumberDecimal("9.99")`` has a precise
value of ``9.99`` where as a double ``9.99`` would have an approximate
value of ``9.9900000000000002131628...``.
To test for ``decimal`` type, use the :query:`$type` operator with the
literal ``"decimal"`` or ``19``.
.. code-block:: javascript
db.inventory.find( { price: { $type: "decimal" } } )
To use the new ``decimal`` data type with a MongoDB driver, an upgrade
to a driver version that supports the feature is necessary.
.. _3.4-rel-notes-aggregation-cluster:
New Aggregation Stage for Recursive Search
3.4 introduces a stage to the :doc:`aggregation pipeline
</core/aggregation-pipeline>` that allows for recursive search.
.. list-table::
:header-rows: 1
:widths: 20 80
* - Stage
- Description
* - :pipeline:`$graphLookup`
- Performs a recursive search on a collection. To each output
document, adds a new array field that contains the traversal
results of the recursive search for that document.
.. seealso:: `Webinar: Working with Graph Data in MongoDB <>`_
New Aggregation Stages for Faceted Search
Faceted search allows for the categorization of documents into
classifications. For example, given a collection of inventory
documents, you may want to classify items by a single category, such as
by the price range, or by multiple categories, such as by price range
as well as separately by the departments.
3.4 introduces stages to the :doc:`aggregation pipeline
</core/aggregation-pipeline>` that allow for faceted search.
.. list-table::
:header-rows: 1
:widths: 20 80
* - Stage
- Description
* - :pipeline:`$bucket`
- Categorizes or groups incoming documents into buckets that
represent a range of values for a specified expression.
* - :pipeline:`$bucketAuto`
- Categorizes or groups incoming documents into specified number
of buckets that represent a range of values for a specified
expression. MongoDB automatically determines the bucket
* - :pipeline:`$facet`
- Processes multiple :ref:`pipelines <aggregation-pipeline>` on
the input documents and outputs a document that contains the
results of these pipelines. By specifying facet-related stages
(:pipeline:`$bucket`, :pipeline:`$bucketAuto`, and
:pipeline:`$sortByCount`) in these pipelines, :pipeline:`$facet`
allows for multi-faceted search.
* - :pipeline:`$sortByCount`
- Categorizes or groups incoming documents by a specified
expression to compute the count for each group. Output documents
are sorted in descending order by the count.
New Aggregation Stages to Facilitate Reshaping Documents
3.4 introduces stages to the :doc:`aggregation pipeline
</core/aggregation-pipeline>` that faciliate replacing documents as
well as adding new fields.
.. list-table::
:header-rows: 1
:widths: 20 80
* - Stage
- Description
* - :pipeline:`$addFields`
- Adds new fields to documents. The stage outputs documents that
contains all existing fields from the input documents as well as
the newly added fields.
* - :pipeline:`$replaceRoot`
- Replaces a document with the specified document. You can specify
a document embedded in the input document to promote the
embedded document to the top level.
New Aggregation Stage to Count
3.4 introduces a new stage to the :doc:`aggregation pipeline
</core/aggregation-pipeline>` that faciliate counting document.
.. list-table::
:header-rows: 1
:widths: 20 80
* - Stage
- Description
* - :pipeline:`$count`
- Returns a document that contains a count of the number of
documents input to the stage.
New Aggregation Array Operators
.. list-table::
:header-rows: 1
:widths: 20 80
* - Operator
- Description
* - :expression:`$in`
- Returns a boolean that indicates if a specified value is in an
* - :expression:`$indexOfArray`
- Searches an array for an occurence of a specified value and
returns the array index (zero-based) of the first occurence.
* - :expression:`$range`
- Returns an array whose elements are a generated sequence of
* - :expression:`$reverseArray`
- Returns an output array whose elements are those of the input
array but in reverse order.
* - :expression:`$reduce`
- Takes an array as input and applies an expression to each
element in the array to return the final result of the
* - :expression:`$zip`
- Returns an output array where each element is itself an array,
consisting of elements in the corresponding array index position
from the input arrays.
New Aggregation String Operators
.. list-table::
:header-rows: 1
:widths: 20 80
* - Operator
- Description
* - :expression:`$indexOfBytes`
- Searches a string for an occurence of a substring and returns
the UTF-8 byte index (zero-based) of the first occurence.
* - :expression:`$indexOfCP`
- Searches a string for an occurence of a substring and returns
the UTF-8 `code point
<>`_ index
(zero-based) of the first occurence.
* - :expression:`$split`
- Splits a string by a specified delimiter into string components
and returns an array of the string components.
* - :expression:`$strLenBytes`
- Returns the number of UTF-8 bytes for a string.
* - :expression:`$strLenCP`
- Returns the number of UTF-8 `code points
<>`_ for a string.
* - :expression:`$substrBytes`
- Returns the substring of a string. The substring starts with the
character at the specified UTF-8 byte index (zero-based) in the
string for the length specified.
* - :expression:`$substrCP`
- Returns the substring of a string. The substring starts with the
character at the specified UTF-8 `code point
<>`_ index
(zero-based) in the string for the length specified.
New Aggregation Control Flow Expression
.. list-table::
:header-rows: 1
:widths: 20 80
* - Operator
- Description
* - :expression:`$switch`
- Evaluates, in sequential order, the ``case`` expressions of the
specified branches to enter the first branch for which the
``case`` expression evaluates to ``true``.
New Date Aggregation Operators
.. list-table::
:header-rows: 1
:widths: 20 80
* - Operator
- Description
* - :expression:`$isoDayOfWeek`
- Returns the ISO 8601 weekday number, ranging from ``1`` (for
Monday) to ``7`` (for Sunday).
* - :expression:`$isoWeek`
- Returns the ISO 8601 week number, which can range from ``1`` to
``53``. Week numbers start at ``1`` with the week (Monday
through Sunday) that contains the year's first Thursday.
* - :expression:`$isoWeekYear`
- Returns the ISO 8601 year number, where the year starts with the
Monday of week 1 (ISO 8601) and ends with the Sundays of the
last week (ISO 8601).
New Monitoring Aggregation Sources
.. list-table::
:header-rows: 1
:widths: 20 80
* - Operator
- Description
* - :pipeline:`$collStats`
- Returns statistics regarding a collection or view.
New Type Operator
.. list-table::
:header-rows: 1
:widths: 26 74
* - Operator
- Description
* - :expression:`$type`
- Returns a string which specifies the
:doc:`/reference/bson-types/` of the argument.
Additional Changes
:pipeline:`$project` stage adds support for field exclusion in the
output document. Previously, you could only exclude the ``_id`` field
in the stage. If you specify the exclusion of a field or fields,
- All other fields are returned in the output documents.
- You cannot specify new fields or the inclusion of other fields.
.. _3.4-relnotes-collation:
Collation and Case-Insensitive Indexes
To allow for language-specific rules for string comparison, MongoDB
3.4 introduces :doc:`collation </reference/collation>` to its query language and
The following operations support collation:
.. include:: /includes/extracts/collation-operations-table.rst
For details, see :doc:`Collation </reference/collation>`.
.. _3.4-relnotes-views:
MongoDB 3.4 adds support for creating read-only views from existing
collections or other views. To specify or define a view, MongoDB 3.4
- the ``viewOn`` and ``pipeline`` options to the existing
:dbcommand:`create` command:
.. code-block:: javascript
db.runCommand( { create: <view>, viewOn: <source>, pipeline: <pipeline> } )
or if specifying a default :ref:`collation <3.4-relnotes-collation>` for the view:
.. code-block:: javascript
db.runCommand( { create: <view>, viewOn: <source>, pipeline: <pipeline>, collation: <collation> } )
- and a corresponding :program:`mongo` shell helper
.. code-block:: javascript
db.createView(<view>, <source>, <pipeline>, <collation>)
For more information on creating views, see :ref:`3.4-reference-views`.
Security Enhancement
Transition to Auth
MongoDB 3.4 adds support for rolling transition to internal
authentication for replica sets and sharded clusters. For details, see
:setting:`security.transitionToAuth` setting and :option:`--transitionToAuth`
command line option for :program:`mongod` and:program:`mongos`.
.. seealso::
User Roles Changes
.. include:: /includes/fact-3.4-built-in-roles-changes.rst
MongoDB Tools
MongoDB introduces :program:`mongoreplay`, a workload capture and
analysis tool that replaces :program:`mongosniff`. You can use
:program:`mongoreplay` to inspect and record commands sent to a MongoDB
instance, and then replay the commands back onto another host at a
later time.
General Enhancements
MongoDB 3.4 includes the following enhancements:
- Added ``systemd`` support in distributions.
- Increased :parameter:`diagnosticDataCollectionDirectorySizeMB`
default size to 200 megabytes from 100 megabytes.
- Decreased the lower bound and the default setting of the
:option:`WiredTiger internal cache <--wiredTigerCacheSizeGB>`. Both
the :option:`WiredTiger Storage Engine internal cache
<--wiredTigerCacheSizeGB>` and the :option:`inMemory Storage Engine
maximum memory size <--inMemorySizeGB>` can accept floating-point values.
- :method:`~db.collection.find()`,
:method:`~db.collection.aggregate()`, :dbcommand:`listIndexes`, and
:dbcommand:`listCollections` operations return a :ref:`maximum of 16
megabytes per batch <cursor-batches>`.
- .. include:: /includes/fact-diagnostic-info.rst
- :program:`mongo` shell adds support for marshalling fields of type
:ref:`javascript<bson-types>` and
:ref:`javascriptWithScope<bson-types>` to JavaScript functions.
See :option:`--disableJavaScriptProtection`.
- Added support for system certificates. If a :program:`mongod`
instance presents a certificate signed with a CA trusted by the
operating system, the :program:`mongo` shell will connect without any
errors. Previously, the :program:`mongo` shell exited with an error
that it could not validate the certificate.
- Added message compression support for internal communication between
members of a replica set or a sharded cluster as well as
communication between :program:`mongo` shell and :program:`mongod` or
See configuration :setting:`net.compression.compressors` setting as
well as the ``--networkMessageCompressors`` option for
:program:`mongod`, :program:`mongos`, and the :program:`mongo` shell.
Platform Support
- MongoDB 3.4 introduces support for ARM64, PPC64LE, and s390x
architectures. See :ref:`prod-notes-supported-platforms` to see the
full platform support matrix.
- .. include:: /includes/admonition-power-ubuntu-restriction.rst
MongoDB Enterprise Features
Log Redaction
MongoDB Enterprise adds support for log redaction for use in
conjunction with MongoDB's :doc:`encrypted storage engine
</core/security-encryption-at-rest>`. Log redaction prevents
potentially sensitive information from being written to the diagnostic
log; however, diagnostics on redacted logs may be more difficult due to
the lack of data related to a log event.
To enable log redaction, see the
:setting:`security.redactClientLogData` setting and the
:option:`--redactClientLogData` option for :program:`mongod`.
LDAP Enhancements
LDAP Authorization
MongoDB Enterprise supports the use of :doc:`Lightweight Directory
Access Protocol (LDAP) service to authorize (i.e. determine access)
</core/security-ldap-external>` a user authenticated via one of the
following authentication mechanism:
- :doc:`/core/security-ldap`. For a tutorial on using both LDAP
Authentication and Authorization, see
- :doc:`/core/kerberos`. For a tutorial on using Kerberos
authentication and Active Directory, see
- :doc:`/core/security-x.509`.
For more information, see :doc:`/core/security-ldap-external`.
MongoDB Enterprise provides a new tool :program:`mongoldap` for testing
your MongoDB :ref:`LDAP configuration options <security.ldap.options>`
against a running LDAP server or set of servers. When configuring
options related to :ref:`LDAP authentication <security-ldap>`, you can
use :program:`mongoldap` to ensure that the authentication operation
works as expected.
Bind via OS Libraries
MongoDB 3.4 supports :doc:`binding to an LDAP server
</core/security-ldap>` via operating system libraries. This allows
Linux and Windows MongoDB 3.4 servers to use an LDAP server for
Linux MongoDB deployments continue to support binding via `saslauthd
Changes Affecting Compatibility
Some changes can affect compatibility and may require user actions. For
a detailed list of compatibility changes, see
.. class:: hidden
.. toctree::
.. _3.4-upgrade:
Upgrade Procedures
- :doc:`/release-notes/3.4-upgrade-standalone`.
- :doc:`/release-notes/3.4-upgrade-replica-set`.
- :doc:`/release-notes/3.4-upgrade-sharded-cluster`.
If you need guidance on upgrading to 3.4, `MongoDB offers major version
upgrade services
to help ensure a smooth transition without interruption to your MongoDB application.
.. class:: hidden
.. toctree::
Known Issues in 3.4.0
List of known issues in the 3.4.0 release:
- :issue:`SERVER-27124`: :rsconf:`protocolVersion: 0 <protocolVersion>`
cannot properly support :readconcern:`"majority"` read concern.
- :issue:`SERVER-27195`: Using collation with documents containing
fields of BSON type ``Symbol``, which is deprecated, is not supported
and may lead to undefined behavior.
- :issue:`SERVER-27207`: Find on view with sort through
:program:`mongos` may incorrectly return empty result set.