admin 管理员组

文章数量: 1086019


2023年12月16日发(作者:下面属于jsp内置对象的是)

QQ:78589858 Email:xcwang@

MongoDB基础教程

第一部分

翻译原因

网上的相关说明别说中文了连英文都很少,而且有的基本上就是一些简单的配置,加上最近时间比较多,有点想做,所以就做了。

致谢

先感谢国家,谢谢国家对我的培养,再感谢组织,感谢我的公司给我了研究MongoDB的机会,让我有时间去研究了MongoDB,最后感谢父母的养育之恩。

温馨提示

我以下所有示例都是建立在Java语言的基础上,只作java语言的介绍,其他语言类似。

概述

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可护展的高性能数据存储解决方案。

它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:

*面向集合存储,易存储对象类型的数据。

*模式自由。

*支持动态查询。

*支持完全索引,包含内部对象。

*支持查询。

*支持复制和故障恢复。

*使用高效的二进制数据存储,包括大型对象(如视频等)。

*自动处理碎片,以支持云计算层次的扩展性

*支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。

*文件存储格式为BSON(一种JSON的扩展)

1

QQ:78589858 Email:xcwang@

*可通过网络访问

所谓“面向集合”(Collenction-Orented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)。

模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。

存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各中复杂的文件类型。我们称这种存储形式为BSON(Binary Serialized

dOcument Format)。

MongoDB服务端可运行在Linux、Windows或OS X平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB在32位模式运行时支持的最大文件尺寸为2GB。

注意:以上概述部分摘自百度百科/view/

第二部分

基础知识(重点)

快速入门

快速入门Unix系统

安装MongoDB

先根据自己的系统下载自己需要的版本,然后解压即可

32位Linux

$ curl /linux/ >

$ tar xzf

64位Linux

$ curl /linux/mongodb-linux-x86_ >

$ tar xzf

其他版本去下载页面/display/DOCS/Downloads找与之对应的版本安装即可。

2

QQ:78589858 Email:xcwang@

下载完了之后解压。

创建数据存放目录。

默认情况下MongoDB的数据存放目录是 /data/db,但是MongoDB不会自己去创建目录,所以需要你手工创建:

$ sudo mkdir /data/db/

你也可以使用不同的路径,在启动的时候知道路径参数—dbpath即可。

启动MongoDB

$ ./mongodb-xxxxxxx/bin/mongod

连接MongoDB

$ ./mongodb-xxxxxxx/bin/mongo

> ( { a : 1 } )

> ()

恭喜你,到此为止,你的第一条数据已经保存进了Linux系统的MongoDB了。

快速入门windows系统

下载,安装同Linux的下载,安装,根据自己需要的版本去下载页面下载,下载完了之后解压,在这里不多罗嗦了。

创建数据目录

在windows下的默认数据目录是C:datadb,但是MongoDB同样不会自己去创建该目录,需要自己的去创建,当然通Linux系统一下,也可以指定别的目录。在启动的时候告诉他即可。

启动MongoDB

连接MongoDB

> ( { a : 1 } )

> ()

恭喜你,到此为止,你的第一条数据已经保存进了windows系统的MongoDB了。

3

QQ:78589858 Email:xcwang@

MongoDB的下载

/display/DOCS/Downloads

MongoDB驱动下载

Java驱动下载地址 /mongodb/mongo-java-driver/downloads

PS:我正在写这个的时候MongoDB的最高版本是1.3

对应的API地址:/java/2.0/

小试牛刀

Java的驱动提供了一个DBObject接口,保存到数据库的对象需要实现该接口。请看下面这个例子:

public class Tweet implements DBObject {

/* ... */

}

然后你的保存可以这么写:

Tweet myTweet = new Tweet();

("user", userId);

("message", msg);

("date", new Date());

(myTweet);

当一个文件从数据库检索出来,他自动转换成DBObject,为了转换成你所需要的类型,使用ectClass():

ectClass(Tweet);

Tweet myTweet = (Tweet)e();

PS:可能很多朋友测试不成功,不知道这个collection怎么来的,在这里你可以这样来获得collection:

DBAddress dba = new DBAddress("localhost", 27017, "TestDB");

DB db = t(dba);

DBCollectioncollection = lection("testcollection");

具体是为什么,后面会具体说到。

4

QQ:78589858 Email:xcwang@

MongoDB的使用

MongoDB的启动

//在这里主要说在Linux的下的问题,windows差不多,但不说了

普通启动

(1) 默认启动 bin/mongod

(2) 指定端口和数据目录 bin/mongod –dbpath=/var/data/ –port=556600

(3) 带有鉴权的启动 bin/mongod –auth

分布式配置

您需要启动的至少两个MongoDB文档数据库。

服务器1:192.168.1.10/Linux1

服务器2:192.168.1.11 /Linux2

启动服务器1:

bin/mongod –slave –source=192.168.1.11:556600 –dbpath=/var/db/

–port=556611 –slavedelay 10 &

启动服务器2:

bin/mongod –slave –source=192.168.1.10:556601 –dbpath=/var/db/

–port=556610 –slavedelay 10 &

PS:这里的意思是启动该服务器1,并且把服务器2作为主服务器,每10秒与主服务器2同步一次。启动服务器2的意思是,把服务器1作为主服务器,每10秒与服务器1同步一次。这样服务器1与服务器2就构成了同步了。

在这里我曾经在公司测试过,是可以的,但是我现在是放假在家里,不知道其中是否有错误,你自己鉴别。

MongoDB在Java中的应用

建立连接

要建立MongoDB的连接,你只要指定要连接到的数据库就可以。这个数据库不一定存在,如果不存在,MongoDB会先为你建立这个库。同时,在连接时你也可以具体指定要连接到的网络地址和端口。(以下示例连接到Linux 192.168.1.10)

//创建一个连接地址

DBAddress dba = new DBAddress("192.168.1.10", 27017, "mydb1");

5

QQ:78589858 Email:xcwang@

//获得数据库

DB db = t(dba);

//鉴权(当鉴权启动时是必须的),成功返回true,否则返回false

boolean auth = ticate("username","passwd".toCharArray());

基本操作

获取集合列表(ps:你可以把集合理解成关系型数据库中的表)

Set colls = lectionNames();

for(String s : colls){

n(s);

}

获得一个集合,其中testCollection可以是集合列表中的一个,也可以是一个新的集合名字,当该集合不存在时自动创建该集合,获得之后即和对该集合进行增删查改

DBCollection coll = lection("testCollection");

插入文档(插入的文档需要是json格式的,类似于key-value,每个键值对之间用逗号分隔)

Eg:

{

"name" : "MongoDB",

"type" : "database",

"count" : 1,

"info" : {

x : 203,

y : 102

}

}

代码实现:

BasicDBObject doc = new BasicDBObject();

("name", "MongoDB");

("type", "database");

("count", 1);

BasicDBObject info = new BasicDBObject();

("x", 203);

("y", 102);

("info", info);

(doc);

6

QQ:78589858 Email:xcwang@

获得文档总数

Long i = nt();

查找文档(查找第一个文档:findOne();查找所有文档:find();根据条件查询文档:find(DBObject))

findOne()的用法:

DBObject obj = e();

n(obj);

find()的用法:

DBCursor cur = ();

while(t()){

n(());

}

find(DBOject)用法:

//查询count = 1 ,name= “MongoDB”的数据

BasicDBObject query = new BasicDBObject();

("count", 1);

("name ", “MongoDB”);

DBCursor cur = (query);

n(()); //查询结果个数

while(t()){

n(());

}

//引申:根据 _id查询

BasicDBObject query = new BasicDBObject();

("_id", new ObjectId("4bb29ce82075bcce6102573d"));

DBCursor cur = (query);

n(()); //查询结果个数

while(t()){

n(());

}

模糊查询

MongoDB支持正则表达式查询,可以代替关系数据库中的模糊查询。由于文档中写代码格式不是很好看,所以不在这里写了。具体请查看下下来的代码文件。

删除数据

(DBObject);

7

QQ:78589858 Email:xcwang@

创建索引

MongoDB支持索引,而且很容易在集合上增加索引。要创建索引,只需要指定要加索引的属性,并且指定升序(1)或降序即可(-1)。

Index(new BasicDBObject("i", 1));

获取索引列表

List list = exInfo();

for(DBObject o : list){

n(o);

}

MongoDB连接池

任何一种数据在做数据库连接的时候都是非常耗时间的,所以需要连接池,MongoDB也不例外,目前我还没有发现MongoDB的第三方连接池,所以我自己写了一个很烂的连接池,放在了代码里面。写的很烂,请别笑话!

第三部分

补充说明

由于在word中写代码我个人感觉很别扭,而且很难写好,所以代码的例子就写这么几个,具体的代码请查看一起下载下来的代码文件,同时欢迎加入NOSQL交流群67472265一起讨论交流。我的英语不是很好,加上我对MongoDB刚接触,所以错误是再说难免的,如果在用的过程中有什么问题,发现有什么错误,我的邮件地址是:xcwang@,期待收到你的邮件。谢谢!

免责申明

我所写的不一定是正确,我所写的只是一些常用的部分,如果你按照我所写的去做,遇到一切风险,我不承担任何责任。

8


本文标签: 文档 数据 集合 需要 数据库