如何在同一台机器上使用不同版本的MongoDB C Driver连接不同版本的MongoDB Server?

阅读 9

01-27 15:00

1. 安装多版本MongoDB C Driver

方法一:源码编译到独立目录
  1. 下载不同版本的驱动源码

# 示例:安装1.17.6和1.23.2版本
wget https://github.com/mongodb/mongo-c-driver/releases/download/1.17.6/mongo-c-driver-1.17.6.tar.gz
wget https://github.com/mongodb/mongo-c-driver/releases/download/1.23.2/mongo-c-driver-1.23.2.tar.gz

  1. 解压并编译安装到不同目录

# 编译1.17.6版本到/opt/mongo-c-driver/1.17.6
tar -xzf mongo-c-driver-1.17.6.tar.gz
cd mongo-c-driver-1.17.6
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/opt/mongo-c-driver/1.17.6 ..
make && sudo make install

# 编译1.23.2版本到/opt/mongo-c-driver/1.23.2
tar -xzf mongo-c-driver-1.23.2.tar.gz
cd mongo-c-driver-1.23.2
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/opt/mongo-c-driver/1.23.2 ..
make && sudo make install

2. 运行多版本MongoDB Server

使用Docker容器(推荐)

# 启动MongoDB 4.4 监听27017端口
docker run -d --name mongo44 -p 27017:27017 mongo:4.4

# 启动MongoDB 6.0 监听27018端口
docker run -d --name mongo60 -p 27018:27017 mongo:6.0

3. 在代码中动态选择驱动版本

编译时指定驱动路径

假设有以下代码 test.c

#include <mongoc/mongoc.h>
#include <stdio.h>

int main() {
    mongoc_init();
    mongoc_client_t *client = mongoc_client_new("mongodb://localhost:27017");
    mongoc_database_t *db = mongoc_client_get_database(client, "test");
    bson_error_t error;
    if (mongoc_database_drop(db, &error)) {
        printf("Connected successfully!\n");
    } else {
        printf("Connection failed: %s\n", error.message);
    }
    mongoc_database_destroy(db);
    mongoc_client_destroy(client);
    mongoc_cleanup();
    return 0;
}

  • 使用1.17.6版本编译

gcc test.c -o test_1.17.6 \
-I/opt/mongo-c-driver/1.17.6/include/libmongoc-1.0 \
-I/opt/mongo-c-driver/1.17.6/include/libbson-1.0 \
-L/opt/mongo-c-driver/1.17.6/lib \
-lmongoc-1.0 -lbson-1.0

  • 使用1.23.2版本编译

gcc test.c -o test_1.23.2 \
-I/opt/mongo-c-driver/1.23.2/include/libmongoc-1.0 \
-I/opt/mongo-c-driver/1.23.2/include/libbson-1.0 \
-L/opt/mongo-c-driver/1.23.2/lib \
-lmongoc-1.0 -lbson-1.0

4. 运行时配置动态链接库路径

# 运行1.17.6版本程序连接MongoDB 4.4
LD_LIBRARY_PATH=/opt/mongo-c-driver/1.17.6/lib ./test_1.17.6

# 运行1.23.2版本程序连接MongoDB 6.0
LD_LIBRARY_PATH=/opt/mongo-c-driver/1.23.2/lib ./test_1.23.2

5. 自动化脚本示例

#!/bin/bash

# 启动MongoDB容器
docker run -d --name mongo5 -p 27019:27017 mongo:5.0

# 编译并测试驱动1.17.6连接MongoDB 5.0
gcc test.c -o test_1.17.5 -I/opt/mongo-c-driver/1.17.6/include... # 完整编译命令
LD_LIBRARY_PATH=/opt/mongo-c-driver/1.17.6/lib ./test_1.17.5

# 清理
docker stop mongo5 && docker rm mongo5

注意事项

  1. API兼容性:不同版本的C Driver可能有API变化,需检查代码兼容性。
  2. 依赖隔离:使用静态编译(-static)可避免动态库冲突,但会增加二进制体积。
  3. 服务器版本兼容性:参考MongoDB官方兼容性矩阵。

通过上述方法,可以灵活测试不同驱动与服务器版本的组合。

精彩评论(0)

0 0 举报