Mongo::Error::UnsupportedFeatures (Server at (localhost:27017) reports wire version (2), but this version of the Ruby driver requires at least (6).)

Mongo::Error::UnsupportedFeatures (Server at (localhost:27017) reports wire version (2), but this version of the Ruby driver requires at least (6).)

我正在尝试将 Rails 4.2 应用程序中的 Mongoid 从 4.x 升级到 5.x (5.4.1) 以连接到 MongoDB 2.6。

我更新了 mongoid.yml 文件以匹配 5.x 的差异:

development:
  clients:
    default:
      database: my_db
      hosts:
        - localhost:27017
      options:

但现在当我尝试 运行 查询时,例如 User.count 我收到以下错误:

Mongo::Error::UnsupportedFeatures (Server at (localhost:27017) reports wire version (2), but this version of the Ruby driver requires at least (6).)

docs说Mongoid5.x兼容MongoDB2.6,为什么会报错?

我有另一个 rails 应用程序 (6.x),它使用 Mongoid 7.x 并且可以很好地连接到同一个数据库。

注:Ruby2.6

OS: MacOS

MongoDB 此处的文档有点混乱。

link你posted is referring the the compatibility between mongoid and the ruby mongodb driver.

another page 有一个矩阵,表示 ruby 驱动程序和 mongoDB 服务器的兼容性。

所以@javiyu 的回答给我指明了正确的方向,MongoDB 的文档确实令人困惑,而 Mongoid 本身支持 MongoDB 2.6, ruby MongoDB驱动程序从版本 2.16 开始不再支持 MongoDB 2.6(已弃用并从 2.17 完全删除,这是我 运行 使用的版本),因此将版本固定到 2.15 就可以了:

#last version that supports mongodb 2.6
gem 'mongo', "~> 2.15.0"  

#last version to support rails 4.2, above that requires at least rails 5
gem 'mongoid', "~> 5.4.0" 

我在嵌入 mongo/java/spring 时遇到了同样的错误。通过 spring.mongodb.embedded.version=2.6.0

解决了它
<dependency>
 <groupId>de.flapdoodle.embed</groupId>
 <artifactId>de.flapdoodle.embed.mongo</artifactId>
 <version>2.2.0</version>
</dependency>