Compatibility Changes in MongoDB 3.4

The following 3.4 changes can affect the compatibility with older versions of MongoDB.

See also Release Notes for MongoDB 3.4.

Sharded Cluster Changes

shardsvr Requirement

For a 3.4 sharded cluster, mongod instances for the shards must explicitly specify its role as a shardsvr, either via the configuration file setting sharding.clusterRole or via the command line option --shardsvr.

Note

Default port for mongod instances with the shardsvr role is 27018. To use a different port, specify net.port setting or --port option.

3.4 mongos and Earlier Versions of mongod

Version 3.4 mongos instances cannot connect to earlier versions of mongod instances.

Removal for Configuration Options

MongoDB 3.4 removes the following configuration options from the mongos:

  • sharding.chunkSize configuration file setting and --chunkSize command-line option
  • sharding.autoSplit configuration file setting and --noAutoSplit command-line option

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 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 the MongoDB 3.4 manual Upgrade Config Servers to Replica Set .

Initial Sync and renameCollection

If a collection is renamed on the sync source while an initial sync is running, the initial sync process fails and restarts to avoid possible data corruption. See SERVER-26117 .

Operations that rename collections include:

As such, when upgrading from 3.2.11 or earlier versions to 3.4, initial syncs may start failing if they encounter renameCollection operations.

In MongoDB versions 3.2.11 or earlier versions, initial sync process would proceed when encountering renameCollection operations, which could potentially corrupt data. See SERVER-4941 .

Deprecated Operations

group

Mongodb 3.4 deprecates the following commands and mongo shell methods:

aggregate without cursor

MongoDB 3.6 removes the use of aggregate command without the cursor option unless the command includes the explain option. Unless you include the explain option, you must specify the cursor option.

To indicate a cursor with the default batch size, specify cursor: {}.

To indicate a cursor with a non-default batch size, use cursor: { batchSize: <num> }.

Stricter Validation of Collection and Index Specifications

Stricter Validation of Collection Options

MongoDB 3.4 enforces a stricter validation of collection options during create and db.createCollection() operations; namely, the specified options must be valid options supported by create and db.createCollection().

For example, the following operation is no longer valid:

db.createCollection( "myCappedCollection", { cappedtypo: true, size: 5242880 } )

Stricter Validation of Index Specifications

MongoDB 3.4 enforces a stricter validation of index specification during createIndexes and db.collection.createIndex() operations. The enforcement does not apply to existing indexes.

Stricter validation include the following:

  • Ensuring that the value in the index key pattern key: value is valid. Specifically, value can be:

    Value Description
    A number greater than 0 For ascending index
    A number less than 0 For descending index
    String “text”, “2dsphere”, “2d”, or “hashed” For special index types

    For example, the following operations are no longer valid:

    db.collection.createIndex( { x: 0 } );
    db.collection.createIndex( { y: "text2d" } );
    db.collection.createIndex( { z: NaN } );
    db.collection.createIndex( { x: 1, unique: true } )
    
  • Ensuring that the specified index options are valid. Previous versions ignored invalid options. For example, the following operations are no longer valid:

    db.collection.createIndex( { y: 1 }, { uniques2: true} );
    db.collection.createIndex( { z: 1 }, { expireAfterSec: 350 } )
    

General Compatibility Changes

  • Updates to namespace restrictions: in MongodDB 3.4, the $ character is no longer supported in database names.

    Important

    You must drop any databases that contain a $ in its name before upgrading to MongoDB 3.4.

  • Removal of deprecated textSearchEnabled parameter. Starting from version 2.6, MongoDB enables the text search feature by default.

  • Removal of mongosniff. In MongoDB 3.4, mongosniff is replaced by mongoreplay, which offers a more flexible superset of mongosniff’s functionality.

  • Updates to $project specification behavior: empty documents in $project specifications produce an error.

  • If you include a hint() that specifies a sparse index when you perform a