Release Notes for MongoDB 3.4

MongoDB 3.4 Released Nov 29, 2016

MongoDB 3.4 is now available. Key features include linearizable readconcerns, views, and collation.

OpsManager 3.4 is also available. See the Ops Manager documentation and the Ops Managerrelease notesfor more information.

Minor Releases

3.4.23 - Sep 16, 2019

Issues fixed:

3.4.22 - Aug 6, 2019

Issues fixed:

Note

Fixed issues include those that resolve the following CommonVulnerabilities and Exposures (CVEs):

3.4.21 - Jun 14, 2019

Issues fixed:

3.4.20 - Mar 13, 2019

Issues fixed:

3.4.19 - Jan 28, 2019

Issues fixed:

3.4.18 - Nov 7, 2018

Issues fixed:

3.4.17 - Sep 7, 2018

Issues fixed:

3.4.16 - Jul 10, 2018

Issues fixed:

3.4.15 - May 16, 2018

Issues fixed:

3.4.14 - March 20, 2018

Issues fixed:

3.4.13 - Feb 10, 2018

Issues fixed:

3.4.12 - Feb 8, 2018

Issues fixed:

3.4.11 - Jan 31, 2018

Issues fixed:

3.4.10 - Oct 31, 2017

Issues fixed:

3.4.9 - Sept 11, 2017

Issues fixed:

3.4.7 – Aug 8, 2017

Issues fixed:

3.4.6 – Jul 5, 2017

Issues fixed:

3.4.5 – Jun 14, 2017

Issues fixed:

3.4.4 – Apr 21, 2017

Issues fixed:

3.4.3 – Mar 28, 2017

Issues fixed:

3.4.2 – Feb 1, 2017

Issues fixed:

3.4.1 – Dec 20, 2016

Issues fixed:

Sharded Cluster

Membership Awareness

Starting in 3.4, sharded cluster components (shards, config servers,mongos instances) recognize their membership in a shardedcluster, including the name of the sharded cluster, the location of theconfig servers.

To support this awareness:

    • shardsvr Requirement
    • For a 3.4 sharded cluster, mongod instances for theshards must explicitly specify its role as a shardsvr,either via the configuration file settingsharding.clusterRole or via the command line option—shardsvr.

Note

Default port for mongod instances with the shardsvrrole is 27018. To use a different port, specifynet.port setting or —port option.

    • 3.4 mongos Incompatibility with Earlier Versions of mongod
    • Version 3.4 mongos instances cannot connect toearlier versions of mongod instances.

Balancer on Config Server Primary

The balancer process has moved from the mongos to theprimary member of the config server replica set. Associated with thischange:

  • 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:
  • MongoDB 3.4 deprecates mongo shell methodsh.getBalancerHost(). A 3.2 or earlier mongoshell method sh.getBalancerHost() is incompatible with a3.4 sharded cluster.
  • MongoDB 3.4 removes the following configuration options from themongos:
    • sharding.chunkSize configuration file setting and—chunkSize command-line option
    • sharding.autoSplit configuration file setting and—noAutoSplit command-line option

Faster Balancing

Starting in MongoDB 3.4:

  • For WiredTiger, the default valuesecondaryThrottle is false for all chunk migrations. Thebalancer does not wait for replication to a secondary and insteadcontinues with the next document.
  • MongoDB can perform parallel chunk migrations. Similar to earlierversions, 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 chunkmigrations.

Removal of Support for SCCC Config Servers

3.4 sharded clusters no longer support the use of mirrored (SCCC)mongod instances as config servers. The use of SCCC configservers, 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 mustbe running as a replica set.

To convert your existing config servers from SCCC to CSRS, see theUpgrade Config Servers to Replica Set.

Sharding Zones

MongoDB 3.4 introduces Zones, which supersedestag-aware sharding available in earlier versions.

To support zones, MongoDB introduces the following commands andmongo shell helpers:

Commandsmongo Shell Methods
addShardToZonesh.addShardToZone()
removeShardFromZonesh.removeShardFromZone()
updateZoneKeyRangesh.updateZoneKeyRange()sh.removeRangeFromZone()

Replica Set

Default Journaling Behavior of majority Write Concern

A new replica set configuration settingwriteConcernMajorityJournalDefault determines whether anacknowledgement for a write concern of majority returns after the majority of the voting members applythe write in memory or to the on-disk journal if the joption is unspecified in the write concern.

Adjustable Catchup Period for Newly Elected Primary

A new replica set configuration settingsettings.catchUpTimeoutMillis defines the time limit for anewly elected primary to catch up with the other replica set membersthat may have more recent writes.

Linearizable Read Concern

MongoDB 3.4 introduces a read concern level of"linearizable" to read data that reflects all successfulwrites issued with a "majority"and acknowledgedprior to the start of the read operation. Linearizable read concernguarantees only apply if read operations specify a query filter thatuniquely identifies a single document.

Linearizable read concern is available for all MongoDB supportedstorage engines.

Combined with "majority" write concern,"linearizable" read concern enables multiple threads toperform reads and writes on a single document as if a single threadperformed these operations in real time; that is, the correspondingschedule for these reads and writes is considered linearizable.

Reads with linearizable read concern may be significantly slower thanreads with "majority" or "local" readconcerns. Always use maxTimeMS with linearizable read concern, incase a majority of data bearing members are unavailable. For example:

  1. db.restaurants.find( { _id: 5 } ).readConcern("linearizable").maxTimeMS(10000)
  2.  
  3. db.runCommand( {
  4. find: "restaurants",
  5. filter: { _id: 5 },
  6. readConcern: { level: "linearizable" },
  7. maxTimeMS: 10000
  8. } )

For more information on read concern, including operations that supportread concerns, see Read Concern.

Improved Initial Sync

  • MongoDB 3.4 improves the performance of initial sync by having initial sync build the indexesas the documents are copied.

  • MongoDB 3.4 improves the initial sync retry logic to be more resilient to intermittent failures onthe network.

  • To avoid potential data corruption, MongoDB 3.4 fails and restartsinitial sync if a collection isrenamed on the sync source during the initial sync. With MongoDB 3.2.11or earlier, initial syncs did not fail and restart but insteadcontinued the process, which could lead to potential data corruption.

For details, see Initial Sync and renameCollection.

  • Modified replSetGetStatus command to accept the optionalinitialSync: 1 in the command to report on initial sync statusand progress if run on the secondary:
  1. db.adminCommand( { replSetGetStatus: 1, initialSync: 1 } )

Decimal Type

3.4 adds support for the decimal128 format withthe new decimal data type. The decimal128 format supports numbers withup to 34 decimal digits (i.e. significant digits) and an exponent rangeof −6143 to +6144.

To support the format, the mongo shell adds theNumberDecimal wrapper.

  1. db.inventory.insert( {_id: 1, item: "The Scream", price: NumberDecimal("9.99"), quantity: 4 } )

When performing comparisons amongdifferent numerical types, MongoDB performs comparison on the exactstored numerical values without first converting values to a commontype.

Unlike the double data type, which only stores an approximation ofthe decimal values, the decimal data type stores the exact value.For example, a decimal NumberDecimal("9.99") has a precisevalue of 9.99 where as a double 9.99 would have an approximatevalue of 9.9900000000000002131628….

To test for decimal type, use the $type operator with theliteral "decimal" or 19.

  1. db.inventory.find( { price: { $type: "decimal" } } )

To use the new decimal data type with a MongoDB driver, an upgradeto a driver version that supports the feature is necessary.

Aggregation

3.4 introduces a stage to the aggregation pipeline that allows for recursive search.

StageDescription
$graphLookupPerforms a recursive search on a collection. To each outputdocument, adds a new array field that contains the traversalresults of the recursive search for that document.

See also

Webinar: Working with Graph Data in MongoDB

Faceted search allows for the categorization of documents intoclassifications. For example, given a collection of inventorydocuments, you may want to classify items by a single category, such asby the price range, or by multiple categories, such as by price rangeas well as separately by the departments.

3.4 introduces stages to the aggregation pipeline that allow for faceted search.

StageDescription
$bucketCategorizes or groups incoming documents into buckets thatrepresent a range of values for a specified expression.
$bucketAutoCategorizes or groups incoming documents into specified numberof buckets that represent a range of values for a specifiedexpression. MongoDB automatically determines the bucketboundaries.
$facetProcesses multiple pipelines onthe input documents and outputs a document that contains theresults of these pipelines. By specifying facet-related stages($bucket, $bucketAuto, and$sortByCount) in these pipelines, $facetallows for multi-faceted search.
$sortByCountCategorizes or groups incoming documents by a specifiedexpression to compute the count for each group. Output documentsare sorted in descending order by the count.

New Aggregation Stages to Facilitate Reshaping Documents

3.4 introduces stages to the aggregation pipeline that faciliate replacing documents aswell as adding new fields.

StageDescription
$addFieldsAdds new fields to documents. The stage outputs documents thatcontains all existing fields from the input documents as well asthe newly added fields.
$replaceRootReplaces a document with the specified document. You can specifya document embedded in the input document to promote theembedded document to the top level.

New Aggregation Stage to Count

3.4 introduces a new stage to the aggregation pipeline that faciliate counting document.

StageDescription
$countReturns a document that contains a count of the number ofdocuments input to the stage.

New Aggregation Array Operators

OperatorDescription
$inReturns a boolean that indicates if a specified value is in anarray.
$indexOfArraySearches an array for an occurence of a specified value andreturns the array index (zero-based) of the first occurence.
$rangeReturns an array whose elements are a generated sequence ofnumbers.
$reverseArrayReturns an output array whose elements are those of the inputarray but in reverse order.
$reduceTakes an array as input and applies an expression to eachelement in the array to return the final result of theexpression.
$zipReturns an output array where each element is itself an array,consisting of elements in the corresponding array index positionfrom the input arrays.

New Aggregation String Operators

OperatorDescription
$indexOfBytesSearches a string for an occurence of a substring and returnsthe UTF-8 byte index (zero-based) of the first occurence.
$indexOfCPSearches a string for an occurence of a substring and returnsthe UTF-8 code point index(zero-based) of the first occurence.
$splitSplits a string by a specified delimiter into string componentsand returns an array of the string components.
$strLenBytesReturns the number of UTF-8 bytes for a string.
$strLenCPReturns the number of UTF-8 code points for a string.
$substrBytesReturns the substring of a string. The substring starts with thecharacter at the specified UTF-8 byte index (zero-based) in thestring for the length specified.
$substrCPReturns the substring of a string. The substring starts with thecharacter at the specified UTF-8 code point index(zero-based) in the string for the length specified.

New Aggregation Control Flow Expression

OperatorDescription
$switchEvaluates, in sequential order, the case expressions of thespecified branches to enter the first branch for which thecase expression evaluates to true.

New Date Aggregation Operators

OperatorDescription
$isoDayOfWeekReturns the ISO 8601 weekday number, ranging from 1 (forMonday) to 7 (for Sunday).
$isoWeekReturns the ISO 8601 week number, which can range from 1 to53. Week numbers start at 1 with the week (Mondaythrough Sunday) that contains the year’s first Thursday.
$isoWeekYearReturns the ISO 8601 year number, where the year starts with theMonday of week 1 (ISO 8601) and ends with the Sundays of thelast week (ISO 8601).

New Monitoring Aggregation Sources

OperatorDescription
$collStatsReturns statistics regarding a collection or view.

New Type Operator

OperatorDescription
$typeReturns a string which specifies theBSON Types of the argument.

Additional Changes

$project stage adds support for field exclusion in theoutput document. Previously, you could only exclude the _id fieldin 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.

Collation and Case-Insensitive Indexes

To allow for language-specific rules for string comparison, MongoDB3.4 introduces collation to its query language andindexes.

The following operations support collation:

Commandsmongo Shell Methods
createdb.createCollection()db.createView()
createIndexes[1]db.collection.createIndex()[1]
aggregatedb.collection.aggregate()
distinctdb.collection.distinct()
findAndModifydb.collection.findAndModify()db.collection.findOneAndDelete()db.collection.findOneAndReplace()db.collection.findOneAndUpdate()
findcursor.collation() to specify collation fordb.collection.find()
mapReducedb.collection.mapReduce()
deletedb.collection.deleteOne()db.collection.deleteMany()db.collection.remove()
updatedb.collection.update()db.collection.updateOne(),db.collection.updateMany(),db.collection.replaceOne()
shardCollectionsh.shardCollection()
countdb.collection.count()
Individual update, replace, and delete operations indb.collection.bulkWrite().

For details, see Collation.

[1](1, 2) Some index types do not support collation. SeeCollation and Unsupported Index Types for details.

Views

MongoDB 3.4 adds support for creating read-only views from existingcollections or other views. To specify or define a view, MongoDB 3.4introduces:

  • the viewOn and pipeline options to the existingcreate command:
  1. db.runCommand( { create: <view>, viewOn: <source>, pipeline: <pipeline> } )

or if specifying a default collation for the view:

  1. db.runCommand( { create: <view>, viewOn: <source>, pipeline: <pipeline>, collation: <collation> } )
  1. db.createView(<view>, <source>, <pipeline>, <collation>)

For more information on creating views, see Views.

Security Enhancement

Transition to Auth

MongoDB 3.4 adds support for rolling transition to internalauthentication for replica sets and sharded clusters. For details, seesecurity.transitionToAuth setting and —transitionToAuthcommand line option for mongod and mongos.

See also

Update Replica Set to Keyfile Authentication (No Downtime)

User Roles Changes

The privileges of the following built-in roles no longer apply to thelocal and config databases:

readAnyDatabaseStarting in 3.4, to provide read privileges on the localdatabase, create a user in the admin database withread role in the local database. See alsoclusterManager and clusterMonitor rolefor access to the config and local databases.
readWriteAnyDatabaseStarting in 3.4, to provide readWrite privileges on thelocal database, create a user in the admin database withreadWrite role in the local database. See alsoclusterManager and clusterMonitor rolefor access to the config and local databases.
userAdminAnyDatabase
dbAdminAnyDatabaseStarting in 3.4, to provide dbAdmin privileges on thelocal database, create a user in the admin database withdbAdmin role in the local database. See alsoclusterManager and clusterMonitor rolefor access to the config and local databases.

Correspondingly, the following built-in roles include additional readand write privileges on local and config databases:

MongoDB Tools

mongoreplay

MongoDB introduces mongoreplay, a workload capture andanalysis tool that replaces mongosniff. You can usemongoreplay to inspect and record commands sent to a MongoDBinstance, and then replay the commands back onto another host at alater time.

mongoreplay is available for Linux and macOS.

General Enhancements

MongoDB 3.4 includes the following enhancements:

db.currentOp and thedatabase profiler report the samebasic diagnostic information for all CRUD operations, including thefollowing:

See configuration net.compression.compressors setting aswell as the —networkMessageCompressors option formongod, mongos, and the mongo shell.

  • Upgraded the SpiderMonkey JavaScript engine to 45.0.2 ESR.

Platform Support

  • MongoDB 3.4 introduces support for ARM64, PPC64LE, and s390xarchitectures. See Supported Platforms to see thefull platform support matrix.
  • Starting in version 3.4, MongoDB removes support for Red Hat Enterprise Linux 5.

For earlier MongoDB Enterprise versions that support Ubuntu 16.04POWER/PPC64LE:

Due to a lock elision bug present in older versionsof the glibc package on Ubuntu 16.04 for POWER, you mustupgrade the glibc package to at least glibc 2.23-0ubuntu5before running MongoDB. Systems with older versions of theglibc package will experience database server crashes andmisbehavior due to random memory corruption, and are unsuitablefor production deployments of MongoDB

The following summarizes the supported architecture for the latestversion of MongoDB products:

Productx86_64/amd64s390xPOWER8 (little endian)ARMv8-A
MongoDB 3.4MongoDB Enterprise onlyMongoDB Enterprise only
BI Connector
Compass
Spark Connector
Ops Manager
Automation Agent
Monitoring Agent
Backup Agent

For details, refer to the individual documentation for the products.

MongoDB Enterprise Features

Log Redaction

MongoDB Enterprise adds support for log redaction for use inconjunction with MongoDB’s encrypted storage engine. Log redaction preventspotentially sensitive information from being written to the diagnosticlog; however, diagnostics on redacted logs may be more difficult due tothe lack of data related to a log event.

To enable log redaction, see thesecurity.redactClientLogData setting and the—redactClientLogData option for mongod.

LDAP Enhancements

LDAP Authorization

MongoDB Enterprise supports the use of Lightweight DirectoryAccess Protocol (LDAP) service to authorize (i.e. determine access) a user authenticated via one of thefollowing authentication mechanism:

For more information, see LDAP Authorization.

mongoldap

MongoDB Enterprise provides a new tool mongoldap for testingyour MongoDB LDAP configuration optionsagainst a running LDAP server or set of servers. When configuringoptions related to LDAP authentication, you canuse mongoldap to ensure that the authentication operationworks as expected.

Bind via OS Libraries

MongoDB 3.4 supports binding to an LDAP server via operating system libraries. This allowsLinux and Windows MongoDB 3.4 servers to use an LDAP server forauthentication.

Linux MongoDB deployments continue to support binding via saslauthd.

Changes Affecting Compatibility

Some changes can affect compatibility and may require user actions. Fora detailed list of compatibility changes, seeCompatibility Changes in MongoDB 3.4.

Upgrade Procedures

If you need guidance on upgrading to 3.4, MongoDB offers major versionupgrade servicesto help ensure a smooth transition without interruption to your MongoDB application.

Download

To download the MongoDB 3.4, go to the MongoDB Download Center

See also

Known Issues in 3.4.0

List of known issues in the 3.4.0 release: