嵌入式linux mongodb,小白在Ubuntu安装mongoDB与mongo-c-driver

目的:

本人从事嵌入式软件,项目中需要使用MongoDB,最终需要熟悉c-driver的API,小白在搭建环境有些浪费时间,故写这文章让与我同样状态的开发人员学习学习。

在Ubuntu上的安装mongodb

方法一:sudo apt-get  install mongodb-server

测试是否安装成功:

1.运行mongoDB服务命令(需要使用root权限):mongod

如有下输出说明已经运行:

68891cd2c8a154c148a2ee3b1028027b.png

2.Mongodb后台管理Shell(root下):mongo

14912799e19b05c8970a54710d8b024b.png

有如下现象是正常工作:

方法二:官网下载对应位数的安装包。

下载地址:https://www.mongodb.com/download-center#community

我使用的32为Ubuntu,所以下载的包为3.3.3版本。关于版本编号自行百度。

下载安装包:mongodb-Linux-i686-3.0.1.tgz

解压:tar zxvf mongodb-linux-i686-3.0.1.tgz

mv  mongodb-linux-i686-3.0.1/ /usr/local/mongodb   # 将解压包拷贝到指定目录

MongoDB 的可执行文件位于 bin 目录下,所以可以将其添加到PATH 路径中:

export PATH=/bin:$PATH

为你 MongoDB 的安装路径。如本文的 /usr/local/mongodb

建议将其写入开机启动脚本:~/.bashrc中。

创建数据库目录

MongoDB的数据存储在data目录的db目录下,但是这个目录在安装过程不会自动创建,所以你需要手动创建data目录,并在data目录中创建db目录。

以下实例中我们将data目录创建于根目录下(/)。

注意:/data/db 是 MongoDB 默认的启动的数据库路径(--dbpath)。

mkdir -p /data/db

现在我们只需要找到/usr/local/mongodb/bin目录下的:mongod与mongo,和上面的操作运行一样。

注意:

1.大概解释一下bin中文件:

mongod:暂且理解为服务器

mongo:暂且理解为可以输入命令的客户端。

mongodimport:导入数据

mongoexport:导出数据

网上教程还有使用一些参数设置

mongod --port 27017(默认)--dbpath /data/db  --logpath /……….(不了解)

2.在后台shell测试命令(mydb和mycoll是我自己创建的,刚刚安装是没有的,刚安装可能只有local):

show  dbs  ----》 查看已经存在的数据:

653bb9f09cb23132f382df8555cdd89e.png

use mydb  ---》使用mydb数据库,查看里面有几个集合:

66336d214b8a2be6dbf1994fb17efed6.png

db.mycoll.find()  ----->查看mycoll这个集合中的文档:

2af64da8c8b7e6fc0e76219e04c2eb29.png

安装mongo-c-driver

预安装

需要先安装依赖库OpenSSL,来建立ssl连接到MongoDB

RedHat / Fedora系统:

$ sudo yum install pkg-config openssl-devel cyrus-sasl-devel

Debian / Ubuntu系统:

$ sudo apt-get install pkg-config libssl-dev libsasl2-dev

FreeBSD系统:

$ su -c 'pkg install pkgconf openssl cyrus-sasl2'

这里下载的MongoDB的C语言驱动是 mongo-c-driver-1.3.5.tar.gz。

解压后打开mongo-c-driver-1.3.5目录下的 README 文件,按其中讲的方法安装,如下:

# tar xzf  mongo-c-driver-1.3.5.tar.gz

# cd mongo-c-driver-1.3.5

# ./configure

# make

# sudo make install

注意:有可能在安装的时候有error,目前我测试在seeing虚拟机安装失败,在我自己的虚拟机安装成功。安装失败可能原因:版本不懂。

官方参考链接:

http://mongoc.org/libmongoc/1.6.2/index.html

7c067bd1171ac9353f62c90871d45641.png

编写连接MongoDB的程序 test.c

/*

* 创建连接

创建一个数据库  mydb

创建一个集合  mycoll

**

**/

#include

#include

#include

int main (int   argc, charchar *argv[])

{

mongoc_client_t      *client;

mongoc_database_t    *database;

mongoc_collection_t  *collection;

bson_t               *command,

reply,

*insert;

bson_error_t          error;

char                 *str;

bool                  retval;

/*

* Required to initialize libmongoc's internals

*/

mongoc_init();

/*

* Create a new client instance

*/

client = mongoc_client_new ("mongodb://localhost:27017");

/*

* Register the application name so we can track it in the profile logs

* on the server. This can also be done from the URI (see other examples).

*/

//mongoc_client_set_appname (client, "connect-example");

/*

创建一个集合db_name  集合中的表叫coll_name(暂且这样叫吧)

* Get a handle on the database "mydb" and collection "mycoll"

*/

database = mongoc_client_get_database (client, "mydb");//获取或者创建数据库的名称

collection = mongoc_client_get_collection (client, "mydb", "mycoll"); //在这个db_name中获取或者创建一个cioll_name的集合

/*

* Do work. This example pings the database, prints the result as JSON and

* performs an insert

*/

command = BCON_NEW ("ping", BCON_INT32(1));//如何连接ping通了,就执行插入操作。

retval = mongoc_client_command_simple (client, "admin", command, NULL, &reply, &error);

if (!retval) {

fprintf (stderr, "%s\n", error.message);

return EXIT_FAILURE;

}

str = bson_as_json (&reply, NULL);

//printf ("line %d\n", __LINE__);

printf ("%s\n", str);

//printf ("line %d\n", __LINE__);

insert = BCON_NEW ("hello", BCON_UTF8 ("world"));

if (!mongoc_collection_insert (collection, MONGOC_INSERT_NONE, insert, NULL, &error)) {

fprintf (stderr, "%s\n", error.message);

}

bson_destroy (insert);

bson_destroy (&reply);

bson_destroy (command);

bson_free (str);

/*

* Release our handles and clean up libmongoc

*/

mongoc_collection_destroy (collection);

mongoc_database_destroy (database);

mongoc_client_destroy (client);

mongoc_cleanup ();

return 0;

}

编译test.c

# gcc -o test test.c -I/usr/local/include/libmongoc-1.0-I/usr/local/include/libbson-1.0/ -lmongoc-1.0 -lbson-1.0

如果在运行的时候报错找不到动态链接库,需要检查一下是否安装正确。

正常安装的话会有以下库:libbson.so------>mongodb解析的数据为bson数据,类似json。

其中libbson是附带的捆绑的库,系统若无,脚本会自动安装。

44848b36133cc957eee3eb72d21c1adb.png

如果运行成功输出:{ "ok" : 1 }

在shell后台使用以上命令:(我们这创建了一个mydb数据库,在这个数据库中添加了一个集合,在这个集合添加一条文档 hello:“world”)

查看mongo-c-driver官方API使用

官方参考链接:http://mongoc.org/libmongoc/1.6.2/api.html

在运行代码之后,需要在后台shell查看是否有增添改查。之后还会更详细的讲解增删改查的api使用。个人感觉官方给的例子没有解释代码意思,需要查看文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/442883.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

获取键盘录入的5个int数,并存放到int数组arr中,输入前提示输入的是第几个值 * * 2.2 传递数组arr调用getNum(int[] arr)方法,获取返回值,并打印输出

package Day05;import java.util.Scanner;/*** 2.定义main方法:* * 2.1 获取键盘录入的5个int数,并存放到int数组arr中,输入前提示输入的是第几个值* * 2.2 传递数组arr调用getNum(int[] arr)方法,获取返回值,并打印…

u盘装linux7.2,u盘安装centos 7.2

在Mac环境下,将Linux的ISO镜像生成一个Linux的安装盘,和Linux下差不多,只是Mac下有一些自己的工具。步骤如下:1、在终端下,将ISO镜像转换为DMG格式:$ hdiutil convert -format UDRW -o ~/linux.dmg /tmp/li…

计算分数数组中去掉最低分的平均分,并打印

package Day05;/*** 2.定义一个分数数组:double[] arr {88.5,96,97,74,88.2,58.5,77.9,90,99};* 计算分数数组中去掉最低分的平均分,并打印*/ public class Day05_Demo02_02 {public static void main(String[] args) {double[] arr {88.5, 96, 97, 74…

linux 串口 lsr 0xc9,串口发送0x0D后,从串口接收到数据被转换成了0x0A

如题,在追踪串口中断接收字符接口UART_getc() 到底层,其调用的是 typedef int32_t (*UART_ReadPollingFxn) (UART_Handle handle, void *buffer, size_t size);函数指针,但是该原型我并没有检索到,这个函数的具体实现&a…

1. 定义方法,求出指定元素在数组中出现的次数.

package Day05;import java.util.ArrayList;/*** 3、* c* 1. 定义方法,求出指定元素在数组中出现的次数.* 2. 定义方法,统计数组中出现次数为1的元素一共有多少个。(推荐-遍历数组,然后调用第一个方法,求出数组中每个元素在数组中…

linux网络编程之广播详细代码及文档说明 -,Linux网络编程之广播

1.概念前面介绍的TCP,UDP都是单播方式,即一对一.而广播是一台主机向局域网内的所有主机发送数据。这时,同一网段的所有主机都能接收到数据。发送广播包的步骤大致如下:(1)确定一个发送广播的接口,如eth0(2)确定广播的地址,通过ioc…

求出该数组中特定元素的和,特定元素是指个位和十位不包含7的偶数。

package Day05;/*** 4.* 分析以下需求,并用代码实现:* (1).定义一个int类型的一维数组,内容为{171,72,19,16,118,51,210,7,18}* (2).求出该数组中特定元素的和,特定元素是指个位和十位不包含7的偶数。*/ public class Day05_Demo0…

linux实现自动互信,Linux 使用shell脚本实现自动SSH互信功能

说假设有一个1000台节点的Hadoop集群,要配置节点之间的SSH免密码登录,该如何用shell脚本实现?#!/bin/expect#循环1000台机器的IP地址,生成密钥文件authorized_keysfor ip in {cat ip.list}dossh user$ip ssh-keygen -t rsa &…

在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。 * (静态初始化一个数组,在数组中随意写入6个分数) 选手的最后得分为: * 去掉一个最高分和一个最低分后 的4个评委平均值。

package Day05;/*** 5、* 需求:在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。* (静态初始化一个数组,在数组中随意写入6个分数) 选手的最后得分为:* 去掉一个最高分和一个最低…

linux系统基础与应用,Linux操作系统:基础、原理与应用

《Linux操作系统:基础、原理与应用》第1部分基础篇第1章操作系统概述/31.1认识操作系统31.1.1操作系统的概念31.1.2操作系统的功能41.2操作系统的发展与现状51.2.1操作系统的发展51.2.2操作系统的分类与现状71.3Linux操作系统概述101.3.1Linux的发展背景与历史101.3…

兔子算法题

package Day05;/*** 6、* 兔子过三个月会成老兔子,第四个月开始老兔子每月都会生一个小兔子* 需求:有一对兔子,从出生起后第3个月起每个月都生一对兔子,* 小兔子长到第三个月后每个月又生一对兔子,* 假如兔子都不死&am…

linux 挂载san存储,新手看招:Linux操作系统下挂载SAN资源

在存储设备上配置好SAN资源后,操作Linux主机服务器1.安装iSCSI驱动程序;2.Linux主机安装iSCSI Initiator;3.配置iSCSI Inititor,主要是IP地址和InitiatorName,这一步得重启进程;#vi /etc/iscsi.confDiscove…

要求将数组中的0项去掉,将不为0的值存入一个新的数组,

package Day05;/*** 7、* 现在有如下一个数组:* int oldArr[]{1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};* 要求将以上数组中的0项去掉,将不为0的值存入一个新的数组,*/ public class Day07_Demo07 {public static void main(String[] args) {int ol…

ccs7调试linux,【图片】【吧主帖】在LINUX(ubuntu)系统下装CCSv6方法(原创)【dsp吧】_百度贴吧...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼首先说下我的系统:系统: Ubuntu14.04.1 (AMD64bit)目标板:三兄弟嵌入式F28335旗舰板仿真器:三兄弟嵌入式XDS100V3仿真器CCS版本:CCS v6 linux版 32bitLinux系统必须库&…

遍历这些字符串,如果字符串没有包含数字的, * 就将字符串中的小写字母转成大写字母并打印字符串

package Day08;import java.util.Scanner;/*** 有如下字符串:"12ab","java","cd","Server78"* 遍历这些字符串,如果字符串没有包含数字的,* 就将字符串中的小写字母转成大写字母并打印字符串*/ public class Da…

湘潭大学-软件工程-选择判断题复习

说明 期末考试单选题和判断题占30分,单选20,判断10分 单选题 选错误的 B依靠松散组合的互联网大众是无法开发出高质量软件产品的 D、所有命名都应尽量使用缩写 C、采用团队的组织方式 D、软件需求一旦确定就不允许变化 以下哪一项是通过运行程序…

大学c语言编程模板,c语言编程模板

《c语言编程模板》由会员分享,可在线阅读,更多相关《c语言编程模板(8页珍藏版)》请在人人文库网上搜索。1、单片机C语言编程模板(基础模板) 程序开始处的程序说明 /* * 年 月曰 程序名: 编写人: 编写时间: 硬件支持: 接口说明: /*…

遍历strs数组,并判断数组中每一个元素的长度, * 将长度为偶数的元素和长度为奇数的元素分别存放在两个集合中,

package Day08;import java.util.ArrayList;/*** 二* 字符串数组strs中包含字符串{"12","345","6789","1","123","4567"},* 创建2个ArrayList集合,* 遍历strs数组,并判断数组中…

c语言函数大全语法下载,C语言函数大全(语法).doc

C语言函数大全(语法)函数名: abort功 能: 异常终止一个进程用 法: void abort(void);程序例:#include #include int main(void){printf("Calling abort()\n");abort();return 0; /* This is never reached */}函数名: abs功 能: 求整数的绝对值用 法: int abs(int i)…

c语言 增删查 案例,C语言实现单链表的增删查改

#include#include#include"linklist.h"#define Test_Header printf("\n-----%s-----\n",__FUNCTION__);//初始化函数void linklistInit(LinkNode **head){*head NULL;}//创建新节点函数LinkNode *CreateNode(LType value){//为新节点申请空间LinkNode *ne…