欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MongoDb(一) -- Ubuntu Server、Windows C++ driver 连接测试

程序员文章站 2022-07-14 09:46:12
...

转载请注明出处:https://blog.csdn.net/mymottoissh/article/details/82696535

最近在学习非关系型数据库,先拿MongoDB开刀,准备在ubuntu上安装服务端,windows上安装客户端,集成到MFC中,做一个简单的项目练练手。但是看了很多网上的配置教程,也没有一个能完整地配置成功。在环境搭建上耽误了好几天,走了不少弯路。把整个流程记录一下,以后再次遇到问题时可以参考,也希望可以帮到有需要的同学。

关键字:MongoDB Ubuntu C++ driver

1. 简介

关于MongoDB的简介网上有很多,这里不再赘述。这里只总结一下MongoDB特点:

  • 面向集合存储。

  • 没有行列概念。文档可以有不同的key,key数据类型可以不同。

  • 查询指令可以使用JSON。

  • 支持索引、故障恢复。

  • 使用二进制存储数据。

  • 文件存储格式为BSON。

接下来就进入整个安装配置流程

2. Ubuntu mongoDB Server安装

我用的Ubuntu版本是16.04,,安装MongoDB非常简单,使用apt-get两条语句搞定

apt-get update
apt-get install mongodb

安装完成后,路径/etc/mongodb.conf 为MongoDB的配置文件,可以配置绑定IP、端口号等配置信息,稍后的C++驱动连接会修改这个文件。通过ps查看mongod后台服务是否开启。

aaa@qq.com:~$ ps aux | grep mongo
mongodb    3994  0.4  0.7 639596 16044 ?        Ssl  16:51   0:04 /usr/bin/mongod --config /etc/mongodb.conf
pangdx     4143  0.0  0.0  13592   944 pts/1    S+   17:06   0:00 grep --color=auto mongo

如果没有,需要手动开启mongod服务,手动开启有两种方式:

通过配置文件启动,这种请方式需要在配置文件中配置启动参数。

/usr/bin/mongod --config /etc/mongod.conf

手动直接启动,其实就是把参数写到了命令行里,分别设置了数据库路径、后台运行、日志路径。

mongod --dbpath=/usr/local/mongodb/data --fork --logpath=/usr/local/mongodb/logs

启动mongod守护进程后,即能登录数据库进行操作了:

aaa@qq.com:~$ mongo
MongoDB shell version: 2.6.10
connecting to: test
> show dbs
admin  (empty)
local  0.078GB
> db.test.insert({id:1, name:'zhangsan', pos:'manager', age:'30'})
WriteResult({ "nInserted" : 1 })
> show dbs
admin  (empty)
local  0.078GB
test   0.078GB
> db.test.find()
{ "_id" : ObjectId("5b9b7721c340f92def988ae5"), "id" : 1, "name" : "zhangsan", "pos" : "manager", "age" : "30" }

3. Windows C++ driver 安装

接下来进行Windows C++ 驱动的安装,我的安装环境是基于VS2010的。

如果没有安装过Python的同学首先需要安装Python,因为在编译驱动源文件时候用到的构建工具Scons是基于Python的。如果在使用Scons构建的时候出现语法错误,请尝试切换Python的版本到2.x,我这里用的版本是2.7。

Python下载路径:https://www.python.org/downloads/。下载完成后进行傻瓜式安装。

  • 下载安装Boost库

Boost官方下载地址:https://sourceforge.net/projects/boost/files/boost-binaries/

CSDN下载地址:https://download.csdn.net/download/mymottoissh/10663255 

同样的傻瓜式安装。这里需要注意的是,到底是下载32位还是64的问题,取决于在VS环境下编译工程的配置,如果编译32位Windows程序,则下载32位Boost,反之亦然。我下载的版本是 boost_1_60_0-msvc-10.0-32.exe。安装完成后记下路径,这里有工程需要的.h、.lib和.dll文件。

  • 下载安装Scons

官方下载地址:https://www.scons.org/pages/download.html

解压后进入源码目录,执行

python setup.py install

程序自动进行安装。安装完成后可以在cmd窗口下执行

scons --version

查看是否安装成功。

Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\Users\Administrator>scons --version
SCons by Steven Knight et al.:
        script: v2.5.0.rel_2.5.0:3544:95d356f188a3[MODIFIED], 2016/04/09 14:38:50, by bdbaddog on ubuntu1404-32bit
        engine: v2.5.0.rel_2.5.0:3544:95d356f188a3[MODIFIED], 2016/04/09 14:38:50, by bdbaddog on ubuntu1404-32bit
        engine path: ['C:\\Python27\\Scripts\\..\\Lib\\site-packages\\scons-2.5.0\\SCons']
Copyright (c) 2001 - 2016 The SCons Foundation

C:\Users\Administrator>

 

  • 下载编译MongoDB C++驱动 

先说明目的:编译驱动的目的是为了获取工程需要的依赖文件。如果编译成功,会得到对应的头文件和库文件。

C++驱动本次选用的mongo-cxx-driver-legacy-1.1.2.tar.gz版本。新版本需要通过CMake编译源码,具体编译方法可见官方网站。legacy版本源码通过Scons编译,操作简便。关于legacy版本的C++驱动,这里引用一段官方说明。所以想尝试新版本的同学,仍需要采用CMake构建编译源码。

NOTE: The Legacy C++ driver has reached End-Of-Life. Please upgrade to the mongocxx driver.

The 26compat release series tracks the server 2.6 releases one-to-one. As a result, it receives only bugfixes and small updates necessary to keep it building in isolation.

The legacy release series, on the other hand, is a permanent and diverging fork. Our philosophy is to keep the legacy branch as close to the 26compat branch as is reasonable, but that when weighing new features against compatibility, we will choose new features. As a result the legacy branch is not 100% source compatible with the 26compat branch.

This page attempts to serve as a transition guide for those users looking to migrate from the 26compat branch to the legacy branch. Note that it does not discuss new features in detail and simply points to the per-release notes.

官方下载地址:http://www.mongodb.org.cn/drivers/

CSDN下载地址:https://download.csdn.net/download/mymottoissh/10663258

下载完成后,进入源码根目录,如果发现含有SConstruct文件,那么该源码是可以通过scons构建的。

执行

scons install --cpppath=D:\boost_1_60_0 --libpath=D:\boost_1_60_0\lib32-msvc-10.0  --dbg=on --32 --dynamic-windows --sharedclient 

其中cpppath代表boost的安装路径,libpath代表boost lib库的路径,dbg表示编译为debug而不是release版本。

编译完成后会在根目录出现build文件夹,/install路径下存有我们需要的头文件和lib库。

这里需要注意参数中的32位/64位需要与Boost版本匹配。如果期间更换过Boost的版本,则需要重新编译C++驱动源码,否则驱动版本会与Boost版本不匹配,构建工程过程中会报某些lib无法找到的错误

4. 工程环境配置及连接测试

  • 工程环境配置

新建VS工程mongotest,配置依赖库

属性页-VC++目录-包含目录添加Boost头文件路径和C++驱动头文件路径。库目录添加Boost lib路径和C++驱动lib路径。

我添加的分别是

D:\local\boost_1_60_0;E:\driver\mongo-cxx-driver-legacy-1.1.2\build\install\include;

E:\driver\mongo-cxx-driver-legacy-1.1.2\build\install\lib;D:\local\boost_1_60_0\lib32-msvc-10.0;

注意路径深度与代码中的包含相匹配。

MongoDb(一) -- Ubuntu Server、Windows C++ driver 连接测试

链接器-输入-附加依赖项添加依赖库:mongoclient-gd.lib;

同时将boost_1_60_0\lib32-msvc-10.0路径下的dll文件和c++驱动路径下的mongoclient-gd.lib文件复制到新建工程exe文件的同级目录下。

  • 编写测试代码
#include <WinSock2.h>
#include <windows.h>
#include <mongo/client/dbclient.h>
#include <string>
#include <iostream>

using namespace mongo;
using namespace std;

int main()
{
	string errmsg;
	client::initialize(); //初始化客户端
	DBClientConnection *conn = new DBClientConnection(false, 0, 3);
	
	if(conn->connect("192.168.0.104:27017", errmsg))
	{
		cout << "conn ok :" << errmsg << endl;
	}
	else
	{
		cout << "conn err :" << errmsg << endl;
	}

    //查询数据
	BSONObj obj;
	auto_ptr<DBClientCursor> cursor = conn->query("test.test", Query("{}"));
	while(cursor->more())
	{
		obj = cursor->next();
		cout << obj << endl;
	}

	system("pause");
	delete(conn);
	return 0;
}

该示例代码做了连接和简单的查询动作,可以将数据库中的数据进行显示。

这里需要注意:

  1. 包含mongodb头文件之前,需要首先包含windows相关头文件
  2. windows下运行驱动,创建连接对象之前,首先要初始化:client::initialize();否则会连接失败
  3. 连接之前需要修改mongodb server的配置文件。还记得安装server时指定的配置文件吗。
# mongodb.conf

# Where to store the data.
dbpath=/var/lib/mongodb

#where to log
logpath=/var/log/mongodb/mongodb.log

logappend=true

#bind_ip = 127.0.0.1
#这里将本地回环改成0.0.0.0,才能通过不同ip进行连接
bind_ip = 0.0.0.0
#port = 27017

# Enable journaling, http://www.mongodb.org/display/DOCS/Journaling
journal=true

# Enables periodic logging of CPU utilization and I/O wait
#cpu = true

# Turn on/off security.  Off is currently the default
#noauth = true
#auth = true

至此,安装测试完毕,enjoy it