MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。它的名称来自humongous这个单词的中间部分,从名字可见其野心所在就是海量数据的处理。本文是一个MongoDB的入门级教程,手把手的教会读者使用MongoDB,并将学习过程中可能遇到的问题一一列举。本文不是用长篇的文字来理论性描述MongoDB的各方面知识,而是用图文并茂的方法来讨论MongoDB,希望用最短的时间使开发人员熟悉MongoDB。

一、MongoDB简介

2011年将被记住,因为这一年SQL将死;这一年,关系数据库从一线退下;这一年开发人员发现他们没必要为了持久化数据,而将每个对象转化为表格结构。2011年是文档数据库的一年,尽管一直在稳步发展势头,通过过去八年多的发展,现在有各种稳定的文档数据库——从基于亚马逊和谷歌的云,到各种开放源码工具,尤其是MongoDB。

那么,MongoDB是什么?这里的五件事是每个开发人员应该知道的:

1. MongoDB 是一个独立的服务器;

2. 它是基于文档的,而不是基于表格的;

3. 它是非结构化的;

4. 不必去学习另一种查询语言;

5. 它具有强大的主流开发语言支持,如 C#、C++、Java、PHP、Perl、Python、Ruby。

1、MongoDB 是一个独立的服务器

如MySQL或PostgreSQL一样,MongoDB提供侦听端口以便接入。它提供了用于查询,创建,更新和删除的工具。从理论上讲,你使用它的工作方式与你使用MySQL或PostgreSQL的工作方式相同:连接,执行任务,并关闭连接。

2、MongoDB是非结构化的

MongoDB 没有结构化语言。如果你想创建一个新的文档类型,你不用做任何事来告诉数据库关于这些数据的结构,而仅仅是存到数据库中即可。简单的说,MongoDB使用类似JavaScript或PHP的类型处理方式。也就是说,数据库是灵活的弱类型。虽然有一些数据是有限制条件的(大块的数据可能需要一些明确的处理),但在大多数情况下,你可以像写PHP代码一样编写你的MongoDB代码。

3、不必去学习另一种查询语言

4. 你可以通过以下链接了解更多信息:

- MongoDB官方文档

- MongoDB教程

你还记得那些你写的数据库抽象层和处理过的ORM层吗?现在,你可以将它们全部丢弃。在MongoDB中,你不需要它们。MongoDB没有很多查询语句。在大多数情况下,只需给它一个数组指定你想要的信息,然后它会给你返回文档的数组。如果你想运行一些非常复杂的查询(如Map-Reduce操作),可以向MongoDB传递JavaScript,其内部的JavaScript引擎可以解析这个脚本。

MongoDB的开发时间也短,因为没有结构需要管理和很少(如果有的话)的数据映射。学习曲线很平滑,因为没有新的查询语言学习。代码是简洁的。毕竟,无须任何其他ORM,封装可以非常简单。你的代码是未来的保证。向你的对象增加更多的字段是很轻松的。因此,需求变化了,你可以很快修改代码以便适应。

二、MongoDB服务器安装

MongoDB的官方下载站是http://www./downloads,可以去上面下载最新的程序下来。在下载页面可以看到,对操作系统支持很全面,OS X、Linux、Windows、Solaris都支持,而且都有各自的32位和64位版本。目前的稳定版本是1.8.1版本。

注意:

1. MongoDB 1.8.1 Linux版要求glibc必须是2.5以上,所以需要先确认操作系统的glibc的版本,笔者最初用Linux AS 4安装不上,最后用的是RHEL5来安装才成功的;

Windows版本服务器安装:

(1)、下载MongoDB

url地址: http://downloads./win32/mongodb-win32-i386-1.8.1.zip

(2)、设置MongoDB目录

将其解压到 d:\,再重命名为mongodb,路径为d:\mongodb

(3)、设置数据文件路径

在d:盘建一个db文件夹,路径d:\db

(4)、启动MongoDB服务

进入 cmd 提示符控制台,D:\mongodb\bin\mongod.exe --dbpath=d:\data\db

D:\mongodb\bin>

D:\mongodb\bin\mongod --dbpath=d:\data\db

MongoDB服务端的默认连接端口是27017。

当使用MongoDB 32位版本时,您将受到大约2GB数据存储的限制。有关详细信息,请参阅http://blog./post/137788967/32-bit-limitations。如果使用--dur选项,限制会更低。

以下是一些操作步骤:

1. 创建D:\mongodb\logs\mongodb.log文件,用于存储MongoDB的日志文件。

2. 安装系统服务:

```

D:\mongodb\bin\mongod --dbpath=d:\data\db --logpath=d:\mongodb\logs\mongodb.log --install

```

3. 将MongoDB作为Windows服务随机启动:

```

D:\mongodb\bin\mongod --dbpath=d:\data\db --logpath=d:\mongodb\logs\mongodb.log --install

```

以下是重构后的内容:

MongoDB服务器安装步骤如下:

1. 下载MongoDB:

```

curl -O http://fastdl./linux/mongodb-linux-i686-1.8.1.tgz

```

2. 设置MongoDB目录:

将下载的文件解压到/Apps,然后重命名为mongodb,路径为/Apps/mongodb。

3. 设置数据文件路径:

创建/data/db目录,使用命令:`mkdir –p /data/db`。

4. 启动MongoDB服务:

在/Apps/mongodb/bin目录下执行以下命令启动MongoDB服务:

```

/Apps/mongodb/bin/mongod --dbpath=/data/db

```

5. 查看MongoDB日志:

打开D:\mongodb\logs\mongodb.log文件,可以查看MongoDB的运行情况或排查问题。

注意:当使用32位MongoDB时,您将被限制在约2GB的数据量

有关详细信息,请参阅http://blog./post/137788967/32-bit-limitations

使用--dur时,限制较低。以下是重构后的内容:

MongoDB 服务端的默认连接端口是 27017。如果要在 Linux 系统上随机启动 MongoDB 作为服务,可以按照以下步骤操作:

1. 首先创建一个用于存储 MongoDB 日志文件的目录,例如 `/Apps/mongodb/logs/mongodb.log`。

```bash

mkdir -p /Apps/mongodb/logs

touch /Apps/mongodb/logs/mongodb.log

```

2. 使用 vi 编辑器打开 `/etc/rc.local` 配置文件,并在其中添加以下内容:

```bash

/Apps/mongodb/bin/mongod --dbpath=/data/db --logpath=/Apps/mongodb/logs/mongodb.log

```

这将在系统启动时自动运行 MongoDB 服务。

3. 确保 MongoDB 服务已成功启动。可以通过检查 `/Apps/mongodb/logs/mongodb.log` 文件中的日志来确认。如果看到类似于 "waiting for connections on port 27017" 的消息,说明 MongoDB 已成功启动。

4. 新打开一个终端窗口,输入 `/Apps/mongodb/bin/mongo`,并按回车键。如果看到类似于 "connecting to: dbserver" 的消息,说明客户端已成功连接到 MongoDB 服务器。此时,您可以开始使用 MongoDB 了。

请根据提供的内容完成内容重构,并保持段落结构:

[root@localhost ~]# /Apps/mongodb/bin/mongo

MongoDB shell version: 1.8.1

connecting to: test

>

(7)、查看MongoDB日志

要查看MongoDB的运行情况或进行排错,可以查看/Apps/mongodb/logs/mongodb.log文件。

[root@localhost logs]# pwd

/Apps/mongodb/logs

[root@localhost logs]# ll

总计 0

-rw-r--r-- 1 root root 0 04-08 20:15 mongodb.log

[root@localhost logs]#

三、MongoDB客户端访问 – Shell方式

MongoDB自带的交互式Javascript shell,用来对MongoDB进行操作和管理的交互式环境。使用 "./mongo --help" 可查看相关连接参数。下面将从常见的操作,如插入,查询,修改,删除等几个方面阐述MongoDB shell的用法。

1、插入记录

> use my_mongodb

switched to db my_mongodb

> db.user.insert({uid:1,username:"Tom",age:25})

> db.user.insert({uid:2,username:"Jerry",age:25})

本例向数据库my_mongodb的表user中插入了2条记录。MongoDB会隐式的创建数据库my_mongodb和表user,所以这个例子没有建库和建表的过程。可以通过show dbs和show collections来查看数据库及表,具体如下:

> show dbs

admin (empty)

local (empty)

my_mongodb 0.0625GB ---隐式创建的数据库

> show collections

system.indexes

user ---隐式创建的表

>

2、查询记录

查询表中的全部记录:

请根据提供的内容完成内容重构,并保持段落结构:

1、查询所有用户记录:

```javascript

db.user.find();

```

结果:

```

{

"_id" : ObjectId("4f81a49b779282ca68fd8a59"),

"uid" : 1,

"username" : "Tom",

"age" : 25

}

{

"_id" : ObjectId("4f81a4a1779282ca68fd8a5a"),

"uid" : 2,

"username" : "Jerry",

"age" : 25

}

```

2、查询用户名是 "Jerry" 的记录:

```javascript

db.user.find({username: "Jerry"});

```

结果:

```

{

"_id" : ObjectId("4f81a4a1779282ca68fd8a5a"),

"uid" : 2,

"username" : "Jerry",

"age" : 25

}

```

3、修改记录,将用户ID是2的记录的年龄修改为100:

```javascript

db.user.update({uid:2},{$set:{age:100}});

```

4、查询一下是否改过来了:

```javascript

db.user.find({uid:2});

```

结果:

```

{

"_id" : ObjectId("4f81a4a1779282ca68fd8a5a"),

"uid" : 2,

"username" : "Jerry",

"age" : 100

}

```

请将以下内容重构为一个段落,并保持原有的格式:

经验证,该记录确实被删除了。

具体来说,我们有一个包含以下字段的对象:_id、uid、username 和 age。其中,_id 是 ObjectId 类型,表示该记录在数据库中的唯一标识符;uid 是一个整数,表示用户的唯一标识符;username 是一个字符串,表示用户名;age 是一个整数,表示用户的年龄。在这个例子中,我们尝试删除这个对象,并验证该记录确实已被删除。