一,关于数据库的基本了解:
数据库分为两种:
(1).关系型数据库;
(2).非关系型数据库。
mongodb 是非关系型数据所以主要说说非关系型数据库:

nosql,区别于应用于RDBMS(关系型数据库)的SQL(结构化查询语言)。SQL主要用于结构化存储的数据的查询与分析操作。而nosql支持类似sql的功能,但是与之相比没有那么多约束,显得更灵活。

二,nosql通常泛指非关系型数据库,通常分为以下四大类:
(1).键值(Key-Value)存储数据库

这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。举例如:Tokyo
Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.

(2).列存储数据库。

这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra,
HBase, Riak.

(3).文档型数据库

文档型数据库的灵感是来自于Lotus
Notes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可
以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。如:CouchDB, MongoDb.
国内也有文档型数据库SequoiaDB,已经开源。

(4)图形(Graph)数据库

图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。如:Neo4J,
InfoGrid, Infinite Graph.
因此,我们总结NoSQL数据库在以下的这几种情况下比较适用:1、数据模型比较简单;2、需要灵活性更强的IT系统;3、对数据库性能要求较高;4、不需要高度的数据一致性;5、对于给定key,比较容易映射复杂值的环境。

三,mongodb基本概念
(1).mongodb是属于文档型的非关系型数据库,是开源、高性能、高可用、可扩展的。

四,基本的命令操作:
1.显示所有数据库:

show dbs//显示所有数据库(默认有3个:admin、local、test)admin和local会显示出来,test没有数据所以不显示。

2.打开/创建数据库:

use 数据库名
//例如:use school

注意:自动创建一个school数据库,但显示时不会出现,因为它里面没有集合和文档。如数据库存在则打开,不存在则创建。

3.显示当前数据库

db

4.删除数据库:

db.dropDatabase()

5.查看集合

show collections
  1. 创建集合
db.createCollection(name,[options])

//options,可选项,指定有关内存大小和索引的选项

例1:

db.createCollection(“tb_user”)
db.createCollection(“tb_user”, {capped : true, autoIndexId : true, size :6142800, max : 10000 })

capped:true              ---如果为true,则启用封闭的集合。上限集合是固定大小的集合,它在达到其最大大小时自动覆盖其最旧的条目。如果指定true,则还需要指定size参数。

     autoIndexId:true     ---如果为true,则在_id字段上自动创建索引。默认值为false

     size:6142800            ---指定上限集合的最大大小(以字节为单位)。 如果capped为true,那么还需要指定此字段的值。

     max:10000                ---指定上限集合中允许的最大文档数。
  1. 删除集合
db.集合名.drop()

//例:db.tb_user.drop()
  1. 添加
db.集合名.save({数据},……)

或

db.集合名.insert({数据},……)
例1:添加一条文档

db.tb_user.insert({ _id : 1,  name: "李小龙",  age: 20 })

说明:_id为默认主键,不写也会自动添加。

 

例2:添加多条文档

db.tb_user.insert([{

_id : 2,

name :"李大龙",

age :18

}, {

_id : 3,

name :"李分赴",

age :16

}]);

9.删除

db.集合名.remove({删除条件})

例1:删除学号为1的文档

db.tb_user.remove({_id :1})

 

例2:删除性别为男且长沙市的

db.tb_user.remove({  $and : [{sex :"男"},{address :"长沙市"}]  })

 

例3:删除年龄等于19岁

db.tb_user.remove({"age":19})

 

例4:删除年龄大18 小于20的 

SQL:delete tb_user whereage>18 and age<20

db.tb_user.remove({

$and:[{ "age" : {$gt:18} },  {"age" : {$lt:20}}]

})
  1. 修改
db.集合名.update({条件},{$set:{新数据}})
例1:修改ID为3的人的姓名

db.tb_user.update( {"_id":3},{$set:{"name":"金大大"}} )

 

例2:修改年龄在40岁以下的,姓名改成张三

db.tb_user.update({"age":{$lte:40}}, {$set:{"name":"张三"}},  {multi:true})

 

注意:{multi:true}用于修改多个时

 

例3:将ID为3的人年龄+10

db.tb_user.update({"_id":3},  {$set: {$inc:{"age":10}} })
  1. 查询
db.集合名.find()
例1:查看集合中文档

db.tb_user.find()

db.tb_user.find().pretty()         //格式化数据,多条数据看效果(不一定有效果)

 

例2:重复数据

db.tb_user.distinct("name")

 

例3:查询指定的列

select name,age from 表名

db.tb_user.find({}, {name: 1, age: 1})

db.tb_user.find({}, {name: 0})

注意:当然name也可以用true或false,当用ture的情况下name:1效果一样,如果用false就是排除name,显示name以外的列信息。

例4:查询前5条数据

db.tb_user.find().limit(5)

 

例5:查询10条以后的数据

db.tb_user.find().skip(10)

 

例6:查询在5-10之间的数据

db.tb_user.find().limit(10).skip(5)