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 是一个整数,表示用户的年龄。在这个例子中,我们尝试删除这个对象,并验证该记录确实已被删除。