1. 安装多版本MongoDB C Driver
方法一:源码编译到独立目录
- 下载不同版本的驱动源码:
# 示例:安装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.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
注意事项
- API兼容性:不同版本的C Driver可能有API变化,需检查代码兼容性。
- 依赖隔离:使用静态编译(
-static
)可避免动态库冲突,但会增加二进制体积。 - 服务器版本兼容性:参考MongoDB官方兼容性矩阵。
通过上述方法,可以灵活测试不同驱动与服务器版本的组合。