Removal of MMAPv1 Storage Engine
MongoDB 4.2 removes support for the deprecated MMAPv1 storage engine.
If your 4.0 deployment uses MMAPv1, you must change the deployment to WiredTiger Storage Engine before upgrading to MongoDB 4.2. For details, see:
MMAPv1 Specific Configuration Options
MongoDB removes the following MMAPv1 specific configuration options:
Removed Configuration File Setting | Removed Command-line Option |
storage.mmapv1.journal.commitIntervalMs |
|
storage.mmapv1.journal.debugFlags |
mongod --journalOptions |
storage.mmapv1.nsSize |
mongod --nssize |
storage.mmapv1.preallocDataFiles |
mongod --noprealloc |
storage.mmapv1.quota.enforced |
mongod --quota |
storage.mmapv1.quota.maxFilesPerDB |
mongod --quotaFiles |
storage.mmapv1.smallFiles |
mongod --smallfiles |
storage.repairPath |
mongod --repairpath |
replication.secondaryIndexPrefetch |
mongod --replIndexPrefetch |
Note
Starting in version 4.2, MongoDB processes will not start with these options. Remove any MMAPv1 specific configuration options if using a WiredTiger deployment.
MMAPv1 Specific Parameters
MongoDB removes the following MMAPv1 parameters:
newCollectionsUsePowerOf2Sizes
replIndexPrefetch
MMAPv1 Specific Command
MongoDB removes the MMAPv1 specific touch
command.
MMAPv1 Specific Options for Commands and Methods
MongoDB removes the MMAPv1 specific options:
MongoDB ignores the MMAPv1 specific option async
for fsync
.
Removed or Deprecated Commands and Methods
Remove Support for the group
Command
Starting in version 4.2, MongoDB removes the group
command (deprecated since version 3.4) and its mongo
shell helper db.collection.group()
.
Use db.collection.aggregate()
with the $group
stage instead.
Remove Support for the eval
Command
Starting in version 4.2, MongoDB removes the eval
command. eval
command has been deprecated since version 3.0.
The associated MongoDB 4.2 mongo
shell methods db.eval()
and db.collection.copyTo()
can only be run when connected to MongoDB 4.0 or earlier.
Remove Support for the copydb
and clone
Commands
Starting in version 4.2, MongoDB removes the deprecated copydb
command and clone
command.
The corresponding mongo
shell helpers db.copyDatabase()
and db.cloneDatabase()
can only be run when connected to MongoDB 4.0 or earlier.
As alternatives, users can use mongodump
and mongorestore
(with the mongorestore
options --nsFrom
and --nsTo
) or write a script using the drivers.
For example, to copy the test
database from a local instance running on the default port 27017 to the examples
database on the same instance, you can:
- Use
mongodump
to dump the test
database to an archive mongodump-test-db
:
- Use
mongorestore
with --nsFrom
and --nsTo
to restore (with database name change) from the archive:
Tip
Include additional options as necessary, such as to specify the uri or host, username, password and authentication database.
Alternatively, instead of using an archive file, you can mongodump
the test
database to the standard output stream and pipe into mongorestore
:
Remove Support for the parallelCollectionScan
Command
Starting in version 4.2, MongoDB removes the parallelCollectionScan
command.
Remove maxScan
MongoDB removes the deprecated option maxScan
for the find
command and the mongo
shell helper cursor.maxScan()
. Use either the maxTimeMS
option for the find
command or the helper cursor.maxTimeMS()
instead.
Remove Support for the geoNear
Command
Starting in version 4.2, MongoDB removes the geoNear
command. Use the $geoNear
aggregation stage instead.
The options for $geoNear
are similar to the removed geoNear
command with the following exceptions:
- The removed
geoNear
command includes in its output a field named dis
that included the distance information.
For the $geoNear
stage, specify the distance field name in distanceField
.
- The removed
geoNear
command accepts a boolean
value for the includeLocs
option to include the loc
field.
For the $geoNear
stage, specify the location field name in includeLocs
.
- The removed
geoNear
command includes the avgDistance
and maxDistance
of the returned results.
You can use the aggregation pipeline to return the avgDistance
and maxDistance
as well. Specifically, after the $geoNear
stage, include a $group
stage to calculate the avgDistance
and maxDistance
:
Remove Support for the repairDatabase
Command
Starting in version 4.2, MongoDB removes the repairDatabase
command and its mongo
shell helper db.repairDatabase()
as well as the repairDatabase
privilege.
As alternatives:
Remove Support for getPrevError
Command
Starting in version 4.2, MongoDB removes the deprecated getPrevError
command and its mongo
shell helper db.getPrevError()
.
Deprecate Support for cloneCollection
MongoDB deprecates the cloneCollection
command and its mongo
shell helper db.cloneCollection()
As alternatives,
Deprecated Plan Cache Commands/Methods
MongoDB deprecates the following:
PlanCache.getPlansByQuery()
method/planCacheListPlans
command.
PlanCache.listQueryShapes()
method/planCacheListQueryShapes
command.
4.2 Drivers Enable Retryable Writes by Default
The official MongoDB 3.6 and 4.0-compatible drivers required including the retryWrites=true
option in the connection string to enable retryable writes for that connection.
The official MongoDB 4.2-compatible drivers enable Retryable Writes by default. Applications upgrading to the 4.2-compatible drivers that require retryable writes may omit the retryWrites=true
option. Applications upgrading to the 4.2-compatible drivers that require disabling retryable writes must include retryWrites=false
in the connection string.
Important
The local
database does not support retryable writes. Applications which write to the local
database will encounter write errors upon upgrading to a 4.2-series driver unless
retryable writes are explicitly disabled.
General Changes
Indexes
Duplicate Index Creation Attempt Error Message
MongoDB changes the returned response if you create an index with one name, and then try to create the index again with another name.
Starting in version 4.2, the createIndexes
command and the mongo
shell helpers db.collection.createIndex()
and db.collection.createIndexes()
report an error if you create an index with one name, and then try to create the same index again but with another name.
In previous versions, MongoDB did not create the index again, but would return a response object with ok
value of 1
and a note that implied that the index was not recreated. For example:例如:
Hashed Index on PowerPC
For hashed indexes, MongoDB 4.2 ensures that the hashed value for the floating point value 263 on PowerPC is consistent with other platforms. In previous versions, the hashed value for the floating point value 263 on PowerPC is inconsistent with other platforms.
Although hashed indexes on a field that may contain floating point values greater than 253 is an unsupported configuration, clients may still insert documents where the indexed field has the value 263.
To list all hashed indexes for your deployment, see PowerPC and 263.
If the current MongoDB 4.0 sharded cluster on PowerPC contains hashed values for 263 as part of the shard key, additional considerations must be taken before upgrading the sharded cluster to 4.2. See Upgrade a Sharded Cluster to 4.2.
min()/max()
Starting in MongoDB 4.2, when specifying min()
/max()
for a db.collection.find()
operation, you must explicitly specify the index for min()
/max()
with the cursor.hint()
method unless the find()
query is an equality condition on the _id
field { _id: <value> }
.
Similarly, when specifying min
/max
in the find
command, you must also explicitly specify the hint
for the min
/max
index.
In previous versions, you could run min()
/max()
(or the corresponding min
/max
fields in the command) with or without explicitly hinting the index regardless of the query condition. If run without the hint in 4.0 and earlier, MongoDB selects the index using the fields in the indexBounds
; however, if multiple indexes exist on same fields with different sort orders, the selection of the index may be ambiguous.
CurrentOp
- When reporting on
"getmore"
operations, the $currentOp
aggregation stage, along with currentOp
command and the db.currentOp()
helper, now returns the originatingCommand
field as a nested field in the new cursor
field. In previous versions, the originatingCommand
was a top-level field for the associated "getmore"
document. See also 4.2 currentOp Changes.
Wire Protocol
- MongoDB no longer supports the deprecated internal
OP_COMMAND
and the corresponding OP_COMMANDREPLY
wire protocol.
killCursors
Changes
Privileges
Starting in MongoDB 4.2, users can always kill their own cursors, regardless of whether the users have the privilege to killCursors
. As such, the killCursors
privilege has no effect in MongoDB 4.2+.
In MongoDB 3.6.3 through MongoDB 4.0.x, users required the killCursors
privilege in order to kill their own cursors when access control is enabled.
Removes AsyncRequestsSenderUseBaton
Parameter
In MongoDB 4.2+ deployment, MongoDB removes the AsyncRequestsSenderUseBaton
parameter and always enables the performance enhancement controlled by the parameter.
Stricter Validation of count
Syntax
Starting in version 4.2, MongoDB implements a stricter validation of the option names for the count
command. The command now errors if you specify an unknown option name.
In previous versions, MongoDB ignores invalid option names.
Removes fastmodinsert
Metric
MongoDB 4.2 removes the deprecated fastmodinsert
metric from various outputs, including the explain executionStats, the profiler output, etc.
Map-Reduce
Starting in version 4.2, MongoDB deprecates:
- The map-reduce option to create a new sharded collection as well as the use of the sharded option for map-reduce. To output to a sharded collection, create the sharded collection first. MongoDB 4.2 also deprecates the replacement of an existing sharded collection.
- The explicit specification of nonAtomic: false option.
Lock Diagnostics Reporting
Starting in version 4.2, MongoDB reports on ReplicationStateTransition
lock information.
In addition, MongoDB 4.2 separates ParallelBatchWriterMode
lock information from Global
lock information. Earlier MongoDB versions report ParallelBatchWriterMode
lock information as part of Global
locks.
For operations that report on lock information, see:
findAndModify
Query/Sort/Projection Argument Validation
Starting in MongoDB 4.2 (and 4.0.12+ and 3.6.14+), the findAndModify
command and its associated mongo
shell methods error if the specified query, sort, or projection argument is not a document.
In earlier versions, the operation treated non-document query or sort argument as an empty document {}
.
See:
dropDatabase
and movePrimary
Starting in MongoDB 4.2,
- If you drop a database and create a new database with the same name, either:
- If you use the
movePrimary
command to move unsharded
collections, either:
This ensures that mongos
and shard instances refresh their metadata cache. Otherwise, the you may miss data on reads, and may not write data to the correct shard. To recover, you must manually intervene.
In earlier versions, you only need to restart or run flushRouterConfig
on the mongos
instances.
For more information, see dropDatabase
and movePrimary
.
libldap
and libldap_r
For MongoDB 4.2 (and 4.0.9) Enterprise binaries linked against libldap
(such as when running on RHEL), access to the libldap
is synchronized, incurring some performance/latency costs.
For MongoDB 4.2 (and 4.0.9) Enterprise binaries linked against libldap_r
, there is no change in behavior from earlier MongoDB versions.
Connection Pooling and LDAP Server
Starting in version 4.2, MongoDB changes the ldapUseConnectionPool
default values to:
true
on Windows.
true
on Linux where MongoDB Enterprise binaries are linked against libldap_r
.
That is, on those systems, MongoDB, by default, uses connection pooling to connect to the LDAP server for authentication/authorization.
In earlier versions (versions 4.0.9+), MongoDB uses false
as the default value for ldapUseConnectionPool
. That is, MongoDB, by default, does not use connection pooling to connect to the LDAP server for authentication/authorization.
See ldapUseConnectionPool
for details.
Removal of system.indexes
and system.namespaces
Collections
Starting in version 4.2, MongoDB removes the system.indexes
and system.namespaces
collections (deprecated since v3.0).
With the removal of these collections, built-in roles clusterManager
, clusterMonitor
, dbAdmin
, read
, restore
, and other roles that inherit from these roles no longer provide privileges to directly access system.indexes
and system.namespaces
collections.
Arbiter Downgrade Requires Clearing Data Directory
MongoDB 4.2 arbiter data files are incompatible with MongoDB 4.0. Downgrading from MongoDB 4.2 to 4.0 requires deleting arbiter data files as an intermediary step. Running a MongoDB 4.0 arbiter against MongoDB 4.2 data files may result in unexpected behavior.
The downgrade instructions for replica sets and sharded clusters include specific steps for downgrading arbiters from 4.2 to 4.0:
Sharded Collections and Replace Documents
Starting in MongoDB 4.2,