MongoDB 是一个高性能,开源,无模式的文档型数据库,采用C++开发,是当前NoSQL数据库中比较热门的一种,在许多场景下可用于替代传统的关系型数据库或键/值存储方式
MongoDB使用BSON作为数据存储和传输的格式,BSON是一种类似JSON的二进制序列化文档,支持嵌套对象和数组。MongoDB很像MySQL,document对应MySQL的row,collection对应MySQL的table
MongoDB服务端可运行在Linux、Windows或OS X平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB在32位模式运行时支持的最大文件尺寸为2GB
1,特点和功能
1) 特点
- 高性能、易部署、易使用,存储数据非常方便。
- 面向集合存储,易存储对象类型的数据,模式自由。
- 支持动态查询,支持完全索引,包含内部对象。
- 支持复制和故障恢复。
- 使用高效的二进制数据存储,包括大型对象(如视频等)。
- 自动处理碎片,以支持云计算层次的扩展性
- 支持Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++语言的驱动程序,社区中也提供了对Erlang及.NET等平台的驱动程序。
- 文件存储格式为BSON(一种JSON的扩展),可通过网络访问。
2) 功能
- 面向集合的存储:适合存储对象及JSON形式的数据。
- 动态查询:Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
- 完整的索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。
- 查询监视:Mongo包含一个监视工具用于分析数据库操作的性能。
- 复制及自动故障转移:Mongo数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移。
- 高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)
- 自动分片以支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器。
2, 适用场合
- 网站数据:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
- 缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源 过载。
- 大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
- 高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。Mongo的路线图中已经包含对MapReduce引擎的内置支持。
- 用于对象及JSON数据的存储:Mongo的BSON数据格式非常适合文档化格式的存储及查询。
3, 下载安装mongoDB 下载, 最新版本mongodb-linux-x86_64-2.2.3.tgz
mongoDB 安装:
tar zxvfmongodb-linux-x86_64-2.2.3.tgz
cdmongodb-linux-x86_64-2.2.3
sudo mkdir /opt/mongodb-2.2.3
sudo ./bin/mongod --dbpath=/opt/mongodb-2.2.3/
安装完毕后,在浏览器URL栏输入:http://localhost:27017/,出现下面内容则表示安装成功!

4, 启动关闭
1) 默认启动
sudo ./bin/mongod (默认保存文件目录为/data/db/, 没有则新建 sudo mkdir -p/data/db/, 默认端口为27017)
2)指定目录启动
sudo ./bin/mongod --dbpath=/opt/mongodb-2.2.3/ (保存文件目录为/opt/mongodb-2.2.3/ , 没有则新建)
3) 指定端口启动
sudo ./bin/mongod --dbpath=/opt/mongodb-2.2.3/ -p 27000 (端口修改为指定27000),启动输出如下:
MongoDB starting : pid=4222 port=27000 dbpath=/opt/mongodb-2.2.3/ 32-bit host=ubuntu
4) 后台启动命令
sudo ./bin/mongod -shardsvr -replSet shard1 -port=27017 -dbpath=/opt/mongodb-2.2.3/ -logpath=/opt/mongodb-2.2.3/log -logappend -rest -fork
5) 后台关闭命令
$ .bin/mongod // 登录客户端
> use admin // 切换到管理员
> db.shutdownServer() // 关闭mongodb
或者
> db.adminCommand({shutdown : 1, force : true})
> //or
> db.shutdownServer({force : true})
> db.adminCommand(shutdown : 1, force : true, timeoutsec : 5) // 超时关闭
> //or
> db.shutdownServer({force : true, timeoutsec : 5})
6) 客户端启动
默认启动:./bin/mongo
指定端口启动:./bin/mongo --port 27000
7) 备份与恢复
$ sudo ./bin/mongodump -d foo -o /opt/mongodb-2.2.3/bk/ // 备份到bk目录
connected to: 127.0.0.1
Tue Feb 5 20:58:13 DATABASE: foo to /opt/mongodb-2.2.3/bk/foo
Tue Feb 5 20:58:13 foo.foo_test to /opt/mongodb-2.2.3/bk/foo/foo_test.bson
Tue Feb 5 20:58:13 1 objects
Tue Feb 5 20:58:13 Metadata for foo.foo_test to /opt/mongodb-2.2.3/bk/foo/foo_test.metadata.json
$ ./bin/mongorestore -d foo -c foo_test /opt/mongodb-2.2.3/bk/foo/foo_test.bson // 恢复foo_test集合
connected to: 127.0.0.1
Tue Feb 5 20:58:20 /opt/mongodb-2.2.3/bk/foo/foo_test.bson
Tue Feb 5 20:58:20 going into namespace [foo.foo_test]
Tue Feb 5 20:58:20 warning: Restoring to foo.foo_test without dropping. Restored data will be inserted without raising errors; check your server log
Tue Feb 5 20:58:20 WARNING: collection foo.foo_test exists with different options than are in the metadata.json file and not using --drop. Options in the metadata file will be ignored.
1 objects found
Tue Feb 5 20:58:20 Creating index: { key: { _id: 1 }, ns: "foo.foo_test", name: "_id_" }
5, 命令示例
1) 启动服务端
sudo ./bin/mongod --dbpath=/opt/mongodb-2.2.3/
2) 启动客户端
./bin/mongo
3) 客户端简单命令
帮助: help
显示数据库:show dbs;
选择数据库:use test;
插入数据:db.foo.save({homer:2});
查询:db.foo.find();
结果:{ "_id" : ObjectId("511078ad857b699e9eaaf516"), "homer" : 2 }
更新:db.foo.update({"homer":2},{"homer":3}); // ( {}, {} ) 第一个{}是查询条件,第二个{}是重新赋值
结果:{ "_id" : ObjectId("511078ad857b699e9eaaf516"), "homer" : 3 }
删除:db.foo.remove({"homer":3});
复合插入:
> t={"homer":2, "name" : {"name1" : "yang", "name2" : "gang"} }
{ "homer" : 2, "name" : { "name1" : "yang", "name2" : "gang" } }
> db.foo.insert(t);
> db.foo.find();
{ "_id" : ObjectId("5110d3e0af69ad089b234001"), "homer" : 2, "name" : { "name1" : "yang", "name2" : "gang" } }
复合查询:
> db.foo.find(); //先查看集合中所有记录
{ "_id" : ObjectId("5110ca1aaf69ad089b233fff"), "homer" : 222 }
{ "_id" : ObjectId("5110caffaf69ad089b234000"), "homer" : 222 }
{ "_id" : ObjectId("5110d3e0af69ad089b234001"), "homer" : 2, "name" : { "name1" : "yang", "name2" : "gang" } }
>
> db.foo.find({"homer":2}); // 查询包含特定内容的记录
{ "_id" : ObjectId("5110d3e0af69ad089b234001"), "homer" : 2, "name" : { "name1" : "yang", "name2" : "gang" } }
MongoDB创建完整示例:
> use test2 // test2数据库不存在也可以执行,但不会立刻创建,需要执行insert操作时才创建
switched to db test2
> show dbs // 没有test2,表明不是立刻创建
local (empty)
test 0.0625GB
>
> db // 显示当前正在使用的数据库,test2不存在但正在使用中
test2
> db.createCollection("t2_test") // 创建集合
{ "ok" : 1 }
> t={"name": "yanggang", "sex" : "male", "lover" : { "lover1" : "little dog", "lover2" : "fish" }} // 初始化集合数据
{
"name" : "yanggang",
"sex" : "male",
"lover" : {
"lover1" : "little dog",
"lover2" : "fish"
}
}
> db.t2_test.insert(t) // 插入数据,此刻才会创建test2数据库
> db.t2_test.find() // 查询
{ "_id" : ObjectId("5110d685af69ad089b234002"), "name" : "yanggang", "sex" : "male", "lover" : { "lover1" : "little dog", "lover2" : "fish" } }
> show dbs // 查看数据库,多了test2
local (empty)
test 0.0625GB
test2 0.0625GB
MongoDB删除示例:
> show collections // 显示集合
system.indexes
t2_test
> db.t2_test.drop() // 删除集合t2_test
true
> show collections // 验证删除成功
system.indexes
> db.test2.remove()
> show dbs // 显示数据库
local (empty)
test 0.0625GB
test2 0.0625GB
> db // 显示当前数据库
test2
> db.dropDatabase() // 删除数据库
{ "dropped" : "test2", "ok" : 1 }
> show dbs // 验证删除成功
local (empty)
test 0.0625GB
MongoDB 索引
> db.foo.find()
{ "_id" : ObjectId("5110ca1aaf69ad089b233fff"), "homer" : 222 }
{ "_id" : ObjectId("5110caffaf69ad089b234000"), "homer" : 222 }
{ "_id" : ObjectId("5110d3e0af69ad089b234001"), "homer" : 2, "name" : { "name1" : "yang", "name2" : "gang" } }
> db.foo.getIndexes() // 查看索引(_id为默认,不可删除和修改)
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "test.foo",
"name" : "_id_"
}
]
> db.foo.ensureIndex({"homer":1}) // 新建索引
> db.foo.getIndexes() // 验证新建索引
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "test.foo",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"homer" : 1
},
"ns" : "test.foo",
"name" : "homer_1"
}
]
> db.foo.dropIndex({"homer":1}) // 删除索引
{ "nIndexesWas" : 2, "ok" : 1 }
> db.foo.getIndexes() // 验证删除索引
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "test.foo",
"name" : "_id_"
}
]
6, 应用示例
> db.foo_test.insert({"homer":1})
> for(var i = 1; i<=5; i++) db.foo_test.save({"homer":2, "score":i}) // 数组生成
> db.foo_test.find()
{ "_id" : ObjectId("5111016cc0e386db7d954ae7"), "homer" : 1 }
{ "_id" : ObjectId("5111030f0e2d3a50c56b49a9"), "homer" : 2, "score" : 6 }
{ "_id" : ObjectId("511103200e2d3a50c56b49aa"), "homer" : 2, "score" : 1 }
{ "_id" : ObjectId("511103200e2d3a50c56b49ab"), "homer" : 2, "score" : 2 }
{ "_id" : ObjectId("511103200e2d3a50c56b49ac"), "homer" : 2, "score" : 3 }
{ "_id" : ObjectId("511103200e2d3a50c56b49ad"), "homer" : 2, "score" : 4 }
{ "_id" : ObjectId("511103200e2d3a50c56b49ae"), "homer" : 2, "score" : 5 }
>
> var cursor = db.foo_test.find(); while(cursor.hasNext())printjson(cursor.next()); // 遍历数组
{ "_id" : ObjectId("5111016cc0e386db7d954ae7"), "homer" : 1 }
{ "_id" : ObjectId("5111030f0e2d3a50c56b49a9"), "homer" : 2, "score" : 6 }
{ "_id" : ObjectId("511103200e2d3a50c56b49aa"), "homer" : 2, "score" : 1 }
{ "_id" : ObjectId("511103200e2d3a50c56b49ab"), "homer" : 2, "score" : 2 }
{ "_id" : ObjectId("511103200e2d3a50c56b49ac"), "homer" : 2, "score" : 3 }
{ "_id" : ObjectId("511103200e2d3a50c56b49ad"), "homer" : 2, "score" : 4 }
{ "_id" : ObjectId("511103200e2d3a50c56b49ae"), "homer" : 2, "score" : 5 }
>
> var cursor = db.foo_test.find(); printjson(cursor[4]) // 查询(迭代)
{ "_id" : ObjectId("511103200e2d3a50c56b49ac"), "homer" : 2, "score" : 3 }
> var arr = db.foo_test.find().toArray(); arr[5] // 查询(数组)
{ "_id" : ObjectId("511103200e2d3a50c56b49ad"), "homer" : 2, "score" : 4 }
> db.foo_test.find().limit(3) // 查询(前三)
{ "_id" : ObjectId("5111016cc0e386db7d954ae7"), "homer" : 1 }
{ "_id" : ObjectId("5111030f0e2d3a50c56b49a9"), "homer" : 2, "score" : 6 }
{ "_id" : ObjectId("511103200e2d3a50c56b49aa"), "homer" : 2, "score" : 1 }
参考推荐:
MongoDB (官方)
MongoDB学习笔记
mongod参数说明
MongoDB应用
MongoDB中索引的用法
分享到:
相关推荐
在本文中,我们将深入探讨MongoDB的安装配置、DOS命令行操作以及如何使用可视化工具MongoDB Compass进行数据库管理。 1. **MongoDB安装配置启动** MongoDB的安装通常包括下载最新稳定版的安装包,根据操作系统(如...
### MongoDB安装配置详解 #### 一、MongoDB简介 MongoDB是一种非常流行的开源NoSQL数据库系统,使用C++语言编写而成。它支持分布式文件存储,能够处理大量的数据,并且易于扩展。MongoDB的一个显著特点在于它能够...
Windows下mongodb安装配置
在这个主题中,我们将深入探讨MongoDB的安装配置以及如何使用Java进行操作。 首先,让我们看看《Mongodb安装.doc》。这份文档应该详细介绍了在各种操作系统(如Windows、Linux或macOS)上安装MongoDB的步骤。安装...
### MongoDB 安装与配置详解及使用MongoVUE进行连接 #### 一、MongoDB简介与安装 **MongoDB** 是一种开源文档型数据库,它使用JSON格式的文档存储数据,具有高性能、高可用性和易扩展性等特点。适用于大数据量、高...
mongodb在Linux下安装配置,集群搭建,分片持久化等,MongoDB安装和配置_for_Linux.doc
在本文中,我们将深入探讨 MongoDB 的安装配置过程,主从复制机制,以及备份与恢复策略。 ### 安装配置 安装 MongoDB 的步骤如下: 1. **下载 MongoDB**:首先,你需要从 MongoDB 官方网站或者通过 `wget` 命令...
2. **解压与配置**:解压缩下载的文件,创建相应的目录结构,如`C:\Program Files\mongodb\bin`、`C:\Program Files\mongodb\data\db`和`C:\Program Files\mongodb\data\log`。 3. **创建日志文件**:在`log`目录下...
Mongodb安装https配置文档
MongoDB在windows和linux安装配置具体步骤和方法
MongoDB 配置文件标准化与三种通常的启动方式介绍 MongoDB 的配置文件标准化是指在 MongoDB 中配置文件的标准化设置,以便更好地管理和维护 MongoDB 数据库。配置文件是 MongoDB 的核心组件之一,它定义了 MongoDB ...
#### 二、MongoDB安装配置 ##### 2.1 安装依赖包 首先确保系统已安装必要的依赖包。可以通过以下命令来安装: ```bash yum install -y git gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib...
MongoDB 安装与配置主从关系 MongoDB 是一个基于分布式文件存储的开源文档数据库,允许用户灵活地存储、处理和分析数据。以下是 MongoDB 安装与配置主从关系的详细步骤和相关知识点。 安装 MongoDB 在 RedHat:...
### MongoDB集群配置详解 #### 一、MongoDB集群与分片概述 MongoDB是一种非常流行的非关系型数据库系统,以其灵活的数据模型、高性能和可扩展性而受到广泛欢迎。随着数据量的增长,单一MongoDB实例可能无法满足高...
1.2、-MongoDB安装配置.mp4 1.3、-MongoDB?shell详.mp4 1.4、-MongoDB文档、集合、数据库的概念.mp4 1.5、-MongoDB数据类型.mp4 123.txt 2.1、_MongoDB增、删、改文档】.mp4 2.2、-MongoDB查询语法1.mp4 2.3...
关于mongoDB环境的配置,包括windows、liunx和苹果系统。
**二、MongoDB配置文件** MongoDB的配置文件通常名为`mongod.conf`,位于安装目录下的`bin`或`data`子目录。这个文件控制MongoDB实例的行为,包括数据存储位置、端口设置、日志记录等。 1. **基本配置选项**: - `...