本想写一个安装步骤,不过已经有了更好的,那就拿来用用。安装步骤请看此博客:https://blog.csdn.net/u010858605/article/details/50957610
MongoDB 是为了快速开发互联网web应用而设计的数据库系统,其数据模型和持久化策略就是为了构建高读/写吞吐量和高自动灾备伸缩性的系统。MongoDB是一款非关系型的数据库,什么叫非关系型?就是把数据直接放进一个大仓库,不标号,不连线,单纯的堆起来。传统数据库由于受到各种关系的累赘,各种数据形式的束缚,难以处理海量数据以及超高并发的业务场景。这一款数据库不支持外键,不支持事务,不支持数据类型约定。
{
_id:10,
username:'peter',
email:'pakjd1231231@mail.com'
}
这段简单的文档存储了用户的一些简单信息字段。这个数据模型的优势是:每个用户都有多个邮箱,在关系型数据库里需要创建单独的email表,而MongoDB提供了非常简单的方式来解决这种问题。
{
_id:10,
username:'peter',
email:'pakjd1231231@mail.com',
'pakjd123123121@mail.com'
}
MongoDB文档的格式基于JSON,一种流行的数据存储格式。JSON数据结构由键值对组成,也可以内置嵌套。这一点与其他语言中的哈希映射以及字典类型相似。这种格式经常用来处理无需多表关联的工作。
例如,要为电商网站的数据库建模。若使用标准的范式设计数据库信息,可能分割到几十个表中存储,要获得完整的数据库里存储的商品信息,则可能需要关联SQL查询。使用文档模型时,绝大部分单个商品信息都可以存储在单个文档里。大部分开发者使用的是面向对象编程语言,使用MongoDB,语言中定义的对象可以原样持久化保存,减少了对象映射的复杂性。
一、Linux下的MongoDB的操作
在安装完毕后,启动MongoDB。方法与启动mysql方法一致:
sudo service mongodb start
#开启之后
#输入
mongodb
与mysql一致,MongoDB也可以创建多个数据库,使用show dbs可用来查看数据库的列表,执行db命令则可以查看当前数据库对象或者集合,运行use命令可以连接到指定的数据库。在MongoDB中数据库的名字可以使任意的字符,但是不能有空格、点号和$。
二、MongoDB的核心——文档
文档的逻辑关系:
例如当前有两个文档,分别是user和address文档
{
"name":"Tom Hanks",
"contact":"987654321",
"dob":"01-01-1991"
}#user文档
{
"building":"22 A,Indiana Apt",
"pincode":123456,
"city":"chengdu",
"state":"sichuan"
}#address文档
关系1:嵌入式关系,把address文档嵌入到user文档中
{
"name": "Tom Hanks",
"contact": "987654321",
"dob": "01-01-1991",
"address":
[{
"building": "22 A, Indiana Apt",
"pincode": 123456,
"city": "chengdu",
"state": "sichuan"
},
{
"building": "170 A, Acropolis Apt",
"pincode": 456789,
"city": "beijing",
"state": "beijing"
}]
}#这就是嵌入式的关系
关系2:引用式关系:将两个文档分开,通过引用文档的_id字段来建立关系
{
"name": "Tom Hanks",
"contact": "987654321",
"dob": "01-01-1991",
"address":
[{
"building": "22 A, Indiana Apt",
"pincode": 123456,
"city": "chengdu",
"state": "sichuan"
},
{
"building": "170 A, Acropolis Apt",
"pincode": 456789,
"city": "beijing",
"state": "beijing"
}]
}#这就是引用式的关系
在实际应用的时候,嵌入式关系比较适合一对一的关系,引用式关系比较适合一对多或者多对多的情况。
启动服务后,进入 MongoDB 命令行操作界面:
使用 use 命令创建数据库:
> use mydb
//当创建成功时,会出现switched to db tutorial
查看当前连接的数据库:
> db
查看所有的数据库:
> show dbs
列出的所有数据库中看不到 mydb 或者显示 mydb(empty) ,因为 mydb 为空,里面没有任何东西,MongoDB 不显示或显示 mydb(empty)。
使用 db.dropDatabase() 销毁数据库:
use 数据库名称
db.dropDatabase()
输入上面两行后,show dbs即可查看到所要删的数据库已不存在。如果要删的数据库之前就存在,且里面有内容,则会出现下面的情况:
如果要删的数据库之前不存在,则会出现下面的情况:
创建集合(即表)
use 数据库名称
db.createCollection("集合名称即表名称")
或者还有带参数的
db.createCollection("集合名称",{参数1:值,参数2:值,......})
#参数描述:
#capped:类型为 Boolean,如果为 true 则创建一个固定大小的集合,当其条目达到最大时可以自动覆盖以前的条目。在设置其为 true 时也要指定参数大小;
#autoIndexID:类型为 Boolean,默认为 false,如果设置为 true,则会在 _id field.s 上自动创建索引;
#size:如果 capped 为 true 需要指定,指定参数的最大值,单位为 byte;
#max:指定最大的文档数。 在 Mongodb 中也可以不用创建集合,因为在创建文档的时候也会自动的创建集合。
#通过下面的语句查看所建立的表
show collections
#删除表的语句
show collections
db.集合名称.drop()
#更新
语法:db.COLLECTION_NAME.update(SELECTION_CRITERIA,UPDATED_DATA)
#操作实例:
db.shiyanlou.update({"e-mail":"test@qq.com"},{$set:{"e-mail":"group@qq.com"}},{multi:true})
#前一个大括号是查询语句,后一个大括号是要修改成的语句
插入语句:有两种插入语insert和save
1.insert插入:
> use mydb switched to db mydb > db.users.insert
([
... { name : "jam", ... email : "jam@qq.com" ... },
... { name : "tom", ... email : "tom@qq.com" ... }
...
])
2.save插入:
> use mydb2
switched to db mydb2
> db.users.save([
... { name : "jam",
... email : "jam@qq.com"
... },
... { name : "tom",
... email : "tom@qq.com"
... }
... ])
insert 和 save 的区别,为了方便记忆,可以先从字面上进行理解,insert 是插入,侧重于新增一个记录的含义,save 是保存,可以保存一个新的记录,也可以保存对一个记录的修改。因此,insert 不能插入一条已经存在的记录,如果已经有了一条记录(以主键为准),inser 操作会报错,而使用 save 指令则会更新原记录。
3.save替换已经存在的文档
语法:db.集合名称.save({_id:ObjectId(),NEW_DATA})
例子:
db.集合名称.save({"_id":ObjectId("53ea174ccb4c62646d9544f4"),"name":"Bob","position":"techer"})
删除文档
db.集合名称.remove(DELECTION_CRITERIA)