MongoDB的简介和使用

来源:互联网 发布:淘宝新店多久有流量 编辑:程序博客网 时间:2024/04/30 11:52

1.简介

MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。Mongo使用C++开发。

插曲:什么是NoSql

NoSql,全称是NotOnlySql,指的是非关系型的数据库。下一代数据库主要解决几个要点:非关系型的、分布式的、开源的、水平可扩展的。原始的目的是为了大规模web应用,这场运动开始于2009年初,通常特性应用如:模式自由、支持简易复制、简单的API、最终的一致性(非ACID)、大容量数据等。NoSQL被我们用得最多的当数key-value存储,当然还有其他的文档型的、列存储、图型数据库、xml数据库等。

2.使用原理

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

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


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

3.适用场景

*MongoDB已经在多个站点部署,其主要场景如下:

1)网站实时数据处理。它非常适合实时的插入、更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。

2)缓存。由于性能很高,它适合作为信息基础设施的缓存层。在系统重启之后,由它搭建的持久化缓存层可以避免下层的数据源过载。

3)高伸缩性的场景。非常适合由数十或数百台服务器组成的数据库,它的路线图中已经包含对MapReduce引擎的内置支持。


*不适用的场景如下:


1)要求高度事务性的系统。

2)传统的商业智能应用。

3)复杂的跨文档(表)级联查询。

4.基本命令行命令

要善于使用help命令

成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可以进行数据库的一些操作。

输入help可以看到基本操作命令:

showdbs:显示数据库列表 
showcollections
:显示当前数据库中的集合(类似关系数据库中的表) 
showusers
:显示用户

use<dbname>:切换当前数据库,这和MS-SQL里面的意思一样 
db.help()
:显示数据库操作命令,里面有很多的命令 
db.foo.help()
:显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令 
db.foo.find()
:对于当前数据库中的foo集合进行数据查找(由于没有条件,会列出所有数据) 
db.foo.find({ a : 1 } )
:对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1

5.数据库的查询

1、查询所有记录
db.userInfo.find();
相当于:select * from userInfo;
默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带";"
但是你可以设置每页显示数据的大小,用DBQuery.shellBatchSize=50;这样每页就显示50条记录了。
 
2、查询去掉后的当前聚集集合中的某列的重复数据
db.userInfo.distinct("name");
会过滤掉name中的相同数据
相当于select distict name from userInfo;
 
3、查询age = 22的记录
db.userInfo.find({"age":22});
相当于:select * from userInfo where age = 22;
 
4、查询age > 22的记录
db.userInfo.find({age:{$gt: 22}});
相当于:select * from userInfo where age >22;
 
5、查询age < 22的记录
db.userInfo.find({age:{$lt: 22}});
相当于:select * from userInfo where age <22;
 
6、查询age >= 25的记录
db.userInfo.find({age:{$gte: 25}});
相当于:select * from userInfo where age >= 25;
 
7、查询age <= 25的记录
db.userInfo.find({age:{$lte: 25}});
 
8、查询age >= 23 并且age <= 26
db.userInfo.find({age:{$gte: 23, $lte: 26}});
 
9、查询name中包含mongo的数据
db.userInfo.find({name:/mongo/});
相当于:select * from userInfo where name like ‘%mongo%’;
 
10、查询name中以mongo开头的
db.userInfo.find({name:/^mongo/});
select * from userInfo where name like ‘mongo%’;
 
11、查询指定列nameage数据
db.userInfo.find({},{name: 1, age: 1});
相当于select name, age from userInfo;
 
12、查询指定列nameage数据, age > 25
db.userInfo.find({age:{$gt: 25}}, {name: 1, age: 1});
相当于:select name, age from userInfo where age >25;
 
13、按照年龄排序
升序:db.userInfo.find().sort({age:1});
降序:db.userInfo.find().sort({age:-1});
 
14、查询name = zhangsan, age = 22的数据
db.userInfo.find({name:'zhangsan', age: 22});
相当于:select * from userInfo where name = ‘zhangsan’ and age = ‘22’;
 
15、查询前5条数据
db.userInfo.find().limit(5);
相当于:selecttop 5 * from userInfo;
 
16、查询10条以后的数据
db.userInfo.find().skip(10);
相当于:select* from userInfo where id not in (
selecttop 10 * from userInfo
);
 
17、查询在5-10之间的数据
db.userInfo.find().limit(10).skip(5);
可用于分页,limitpageSizeskip是第几页*pageSize
 
18or查询
db.userInfo.find({$or:[{age: 22}, {age: 25}]});
相当于:select * from userInfo where age = 22 or age = 25;
 
19、查询第一条数据
db.userInfo.findOne();
相当于:selecttop 1 * from userInfo;
db.userInfo.find().limit(1);
 
20、查询某个结果集的记录条数
db.userInfo.find({age:{$gte: 25}}).count();
相当于:select count(*) from userInfo where age >= 20;
 
21、按照某列进行排序
db.userInfo.find({sex:{$exists: true}}).count();
相当于:select count(sex) from userInfo;

6.索引

    1、创建索引
    db.userInfo.ensureIndex({name:1});
db.userInfo.ensureIndex({name:1, ts: -1});
2、查询当前聚集集合所有索引
db.userInfo.getIndexes();
3、查看总索引记录大小
db.userInfo.totalIndexSize();
4、读取当前集合的所有index信息
db.users.reIndex();
5、删除指定索引
db.users.dropIndex("name_1");
6、删除所有索引索引
db.users.dropIndexes();
db.userInfo.ensureIndex({name:1});
db.userInfo.ensureIndex({name:1, ts: -1});
2、查询当前聚集集合所有索引
db.userInfo.getIndexes();
3、查看总索引记录大小
db.userInfo.totalIndexSize(); 
4、读取当前集合的所有index信息
db.users.reIndex(); 
5、删除指定索引
db.users.dropIndex("name_1"); 
6、删除所有索引索引
db.users.dropIndexes();

7.参考链接

百度百科:

http://baike.baidu.com/subview/3385614/9338179.htm#viewPageContent

MongoDB基本使用:

http://www.cnblogs.com/TankMa/archive/2011/06/08/2074947.html









0 0
原创粉丝点击