Compatility of older driver versions against newer mongodb server - mongodb

We have multiple applications using mongodb as database. In our current case our applications are using the mongo driver 3.4.
On the server side currently we are running with Mongo 3.4 but we would like to keep the Mongo version up to date as long as possible.
I know that mongo drivers provide such level of backward compatibility, but I don't know whether an old version of mongo driver can work without any problem with a newer version of a mongo server.
Can mongo driver 3.4 work with 3.6 server without any problem?

Officially supported drivers provide a form of backward compatibility.
That is, newer drivers should be compatible with older server versions, but thorough testing of the application to double-check is always strongly recommended.
Note that the opposite is not always true, e.g. newer servers may be compatible with older drivers, but there is no guarantee. This is especially true if you apply setFeatureCompatibilityVersion command after a server upgrade.
The page Driver Compatibility in the documentation should be up-to-date with driver versions vs. server versions. You might be able to refer to this page in the future.
As of December 2021, the driver compatibility pages containing compatibility matrices for Python can be found at:
PyMongo: https://docs.mongodb.com/drivers/pymongo/#mongodb-compatibility
Motor: https://docs.mongodb.com/drivers/motor/#mongodb-compatibility

Related

Why does MongoDB advise on upgrading MongoDB incrementally, version-by-version?

Apologies if this question is too open-ended.
I have inherited an aging tech stack and am required to upgrade our 200GB MongoDB Community Edition v3.4 installation (hosted on Ubuntu 20) to MongoDB v5 in order to support some new features.
MongoDB advises that to install v5.0, one must be already on MongoDB v4.4:
https://www.mongodb.com/docs/manual/release-notes/5.0-upgrade-standalone/
They say that if you are on a version older than 4.4, then you need to incrementally upgrade to v4.4 before upgrading to v5.
However, if you follow the links in that official upgrade tutorial, you will find that in order to upgrade to any version of MongoDB, they insist on you upgrading version-by-version, successively.
So for me on v3.4 the upgrade path will look like this:
v3.4 -> v3.6 -> v4.0 -> v4.2 -> v4.4 -> v5.0.13
Following these tutorials:
https://www.mongodb.com/docs/manual/release-notes/3.6-upgrade-standalone/
https://www.mongodb.com/docs/manual/release-notes/4.0-upgrade-standalone/
https://www.mongodb.com/docs/manual/release-notes/4.2-upgrade-standalone/
https://www.mongodb.com/docs/manual/release-notes/4.4-upgrade-standalone/
https://www.mongodb.com/docs/manual/release-notes/5.0-upgrade-standalone/
I'm not entirely sure why this is necessary, as the tutorials themselves seem to mostly involve copying over newer binaries and then setting a feature compatibility version in the database config.
To test whether this was necessary I did a mongodump of our entire v3.4 database and then installed a standalone MongoDB v5.0.13 on the same server and then mongorestore to the new v5.0.13 database. Everything seems to work fine, mongorestore spent two hours recreating all the indexes as its last step (something various articles told me would not happen using the mongodump/mongorestore method).
I am able to connect Mongo clients to this new v5.0.13 Community instance without issue. All the data is there and I am able to query it just fine.
So my question is, why does MongoDB strongly advise doing the upgrade incrementally, one version at a time when dumping the database and restoring it to a new version of MongoDB seems to work just fine?
The only issues I have currently is having to rewrite some client code which is using an older Mongo Java driver. This is something I am going to have to do regardless of the upgrade method I used.
Our MongoDB instance is Community Edition and is a single, standalone instance (not a replica set) so I don't know if this matters. Perhaps the upgrade process described by MongoDB is for Mongo Cloud or for Enterprise?
I'm just looking for clarification on whether the simpler method I tried is going to cause me issues. Maybe I've missed something I hadn't considered.

Is using a newer Mongo shell version with an older MongoDB version safe?

I use MongoDB on multiple production servers, with different versions for different projects. My development environment has v3.6 of the shell but when I connect to a server with MongoDB v3.4, I am greeted with this message upon login:
WARNING: shell and server versions do not match
Is it unsafe to use a newer Mongo shell with an older DB version?
Has MongoDB provided any official answer/documentation regarding this?
Is it unsafe to use a newer Mongo shell with an older DB version?
The startup warning is about expectations rather than safety: ideally the major version (x.y) of your mongo shell and MongoDB deployment should be part of the same release series. Basic commands are generally backward-compatible (and will default to "legacy mode" where appropriate), but mismatched shell versions can definitely lead to unexpected or confusing results.
For example, the 3.6 mongo shell includes helpers for new MongoDB 3.6 features like sessions and retryable writes. If you connect to an older MongoDB server, use of helpers for newer features or options may not always result in an obvious error or warning.
Similarly, if you connect to a MongoDB 3.6 deployment using a 3.4 mongo shell you will be missing helpers for newer server features.
You can choose to ignore the version mismatch warning if you are confident the difference won't cause any issues for the commands you are using.
If you regularly need to connect to multiple MongoDB server versions (and use Linux or macOS), m (MongoDB version manager) is very handy for downloading and switching between multiple mongo versions.

Copy database from host with MongoDB 2.4 to host with MongoDB 3.0 via ssh tunnel

I trying to migrate an old application, using MongoDB 2.4 to a host, running MongoDB 3.0 in Docker container. For test purpose I am copying the data via ssh tunnel from the older to the newer version.
As I read about the updating process of MongoDB, first I should use Mongo 2.6 and then 3.0. However my test with avoiding the step with version 2.6 was successful and the database works fine. Could somebody explain me is that really possible or I have misunderstood something? It's really strange for me.
Upgrading from 2.4 to 2.6, prior to upgrading to 3.0 is a requirement according to the documentation:
To upgrade an existing MongoDB deployment to 3.0, you must be running
2.6. If you’re running a version of MongoDB before 2.6, you must upgrade to 2.6 before upgrading to 3.0. See Upgrade to 2.6 for the
procedure to upgrade from 2.4 to 2.6. Once upgraded to MongoDB 2.6,
you cannot downgrade to any version earlier than MongoDB 2.4.
Having said that, if you have run the corresponding test cases for your application, with a good test coverage, the indexes are working properly, and nothing has been broken I can not see a reason to worry about but ideally they suggest to migrate to 2.6 and then make the move to 3.0 to avoid data corruption.

C# client lib for Mongodb: Will it run against Mongodb 3.x?

We have an app that uses the C# Mongodb client lib from mongo, version 1.1.0.4184
This code currently runs against mongodb 2.6.4
We would like to stand up a new mongodb server, the current version (3.2.11). Will our code run against newer mongodb?
It really depends what you mean by "will it run". The MongoDB v1.1.0.4184 C# driver was released in June, 2011 and dates to roughly the MongoDB 1.8 server release timeframe. This driver version is certainly no longer tested or supported, and will not be fully compatible with newer server features like the WiredTiger storage engine (default in MongoDB 3.2+) or SCRAM-SHA-1 authentication (default in MongoDB 3.0+).
The MongoDB documentation includes a reference table with recommended version(s) of the drivers for use with a specific version of MongoDB: C#/.NET Driver Compatibility.
If this is a production system I would strongly recommend taking the time to update and test a supported version of the C# driver for use with MongoDB 3.2 (eg. the v1.11 C# driver). I suspect it is very likely you will encounter fixed (or novel) bugs/behaviour using a driver that is more than five years old. Your application won't be able to take advantage of many of the newer server features, and this obsolete driver predates specifications such as standard Server Discovery and Monitoring (SDAM) behaviour.
That said, assuming you aren't using any features the driver isn't aware of your code may continue to run (or at least appear to run) successfully. In my opinion doing so is a high risk deployment strategy.
Yes, i am using it, but however we have to chek on specific features, which you were using. using MongoDB latest driver is much better in terms of latest features and there are few features were removed(like 'eval()').

When is Spring Data MongoDB targeting support for MongoDB 3.0?

Seems the MongoDB release is a significant performance upgrade - ay idea when Spring Data MongoDB will support this version?
Strictly speaking, the MongoDB 3.0 server can even be used with the latest 2.13 Java driver and thus the currently released Spring Data MongoDB 1.6.2. For a full compatibility overview of the driver and server versions, see this wiki page.
The recently released first release candidate of Spring Data MongoDB 1.7 ships support for the MongoDB 3.0 Java driver. This is mostly a compatibility release, we don't target special 3.0 features yet (although you should be able to benefit from an upgrade nonetheless).
Find more information about this in the release train wiki, the JIRA ticket as well as the corresponding section of the reference documentation.
The GA release of Spring Data MongoDB 1.7 is scheduled to be part of the Fowler release train GA end of March.
Spring Data Mongo has 1.7RC1 -> http://docs.spring.io/spring-data/data-mongo/docs/1.7.0.RC1/ Hopefully that one will be released soon.
As Java Driver github repo says, they released a 2.13.0 version on January 29th and it is stable -> https://github.com/mongodb/mongo-java-driver/releases/tag/r2.13.0 It includes all the features for mongo 3.0, but you need to go through the compatibility to upgrade to this version.
Also, they are working on v. 3.0.0. for Java Driver, you can find it here -> https://github.com/mongodb/mongo-java-driver/releases/tag/r3.0.0-beta3 (its still in beta though)