mongodb权威指南-基础

简介

mongodb是一个面向文档的数据库,并非关系型数据库。“文档模型”。
扩展性:mongodb的设计采用横向扩展。
功能:索引、聚合、特殊的集合类型、文件存储。
性能:对文档进行动态填充,预分配数据文件利用额外空间换取稳定的性能。尽可能多用内存做缓存。

mongodb基础知识

mongodb 文档数据库,存储的是文档(Bson->json的二进制化).

特点:内部执行引擎为JS解释器, 把文档存储成bson结构,在查询时,转换为JS对象,并可以通过熟悉的js语法来操作.

js语句===>通过mongodb的js引擎V8===>转为bson结构进行存储。通过gridfs来存储

取出数据==》query json数据==>查出bson结构===>转为json格式。

mongo和传统型数据库相比,最大的不同:
传统型数据库: 结构化数据, 定好了表结构后,每一行的内容,必是符合表结构的,就是说–列的个数,类型都一样.
mongo文档型数据库: 表下的每篇文档,都可以有自己独特的结构(json对象都可以有自己独特的属性和值)

文档
文档是mongodb的基本单元。文档表示(key:value)类似js的对象
key:不能含有\0空字符。.和$具有特殊意义。区分类型、区分大小写。
集合
集合:一组文档,集合类似于数据库中的一张表。
集合是动态模式,可以各式各样。
{"greeting":"hello world"}{"foo":5}

注意:同种类型的文档放在一个集合里,数据会更加集中。

在一个集合里查询特定类型的文档在速度上也不是很划算,分开查询多个集合要快得多。

命名
集合名不能是空字符串,
不能包含空字符,
不能以system开头,这个系统为集合保留的前缀。
不能包含保留$符号。
子集合
组织集合使用.分隔不同命名空间的子集合。
blog.posts和blog.authors。blog集合里面有posts和authors子集
数据库
多个文档组成集合,多个集合组成数据库。一个mongodb实例可以承载多个数据库。
数据库最终变成文件系统里的文件,而数据库名就是相应的文件名。
示例
思路: 如果有电影, 影评, 影评的回复, 回复的打分
在传统型数据库中, 至少要4张表, 关联度非常复杂.
在文档数据库中,通过1篇文档,即可完成.

体现出文档型数据库的反范式化.

{
 fiim:’天龙八部’
    comment:[
        {content:’王家卫的电影风格’,
        reply:[‘支持’,’好’]
        }
    ]
}
mongodb安装
bin目录下有相关的执行文件:
bsondump:    导出bson结构;
mongo:         客户端(mysql.exe)
mongod:      服务端(mysqld.exe)
mongodump:   整体数据库导出(二进制,相当于mysql_dump)
mongoexport:  导出易识别的json文档或者csv文档;
mongofiles:
mongoimport:数据库导入
mongooplog:
mongoperf:
mongorestore:   数据库整体导入
mongos: 路由器(分片时用的)集群使用
mongostat:观察服务器状态
mongotop:运维使用
php安装mongodb扩展

1、下载相关的扩展 http://pecl.php.net/package/mongodb

2、

启动mongodb

指定你的数据文件、日志文件端口

–dbpath:数据存储目录;

–logpath:日志存储目录;

–port:端口;

–fork:后台进程运行

#mkdir /opt/database
#touch /opt/mongolog
# ./mongod --dbpath /opt/database --logpath /opt/mongolog --fork --port 27017
运行mongodb shell
mongo shell是一个功能完备的js解释器,可运行任何js程序;
是一个强大的客户端;
[root@localhost bin]# ./mongo
MongoDB shell version v3.4.2

查看mongodb的占用磁盘

[root@localhost opt]# du -h
0   ./databse
301M    ./database/journal
28K ./database/diagnostic.data
301M    ./database
396M    .
基本操作

查看数据show dbs;show databases查看数据库

查看数据库
> show dbs;或者show databases;
admin  0.000GB 类似root数据库,将用户添加到admin数据库自动拥有所有数据库权限
local  0.000GB不可复制,本地集合类似sechemal

选择数据库use

选择数据库
> use local
switched to db local

查看数据库中的所有表

> show tables;或者show collection
startup_log

查看帮助

> db.help();
help();
db.foo.help();

创建数据库,在mongodb中数据库是隐式创建的,use 一个不存在的库

> use shop
switched to db shop

创建数据表,不用定义表的结构

> use shop
switched to db shop
> db.createCollection('user');
{ "ok" : 1 }
> show dbs;
admin  0.000GB
local  0.000GB
shop   0.000GB

插入数据表,并查询出来

> post = {"title":"my blog post","content":"here blog post","date":new Date()}
{
    "title" : "my blog post",
    "content" : "here blog post",
    "date" : ISODate("2017-02-17T15:52:24.971Z")
}
> db.blog.insert(post);
WriteResult({ "nInserted" : 1 })
> db.blog.find();
{ "_id" : ObjectId("58a71c4ebd132c30ed48c717"), "title" : "my blog post", "content" : "here blog post", "date" : ISODate("2017-02-17T15:52:24.971Z") }
> 

_id:表示一个唯一的hash值
find和findOne方法可以用于查询集合里面的文档;findOne()查询一条

更新数据
update接收两个参数:第一个限定条件,第二个是新的文档。需要新增一个新的键

> post.comments = [];
[ ]
> db.blog.update({title:"my blog post"}, post);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.blog.find();
{ "_id" : ObjectId("58a71c4ebd132c30ed48c717"), "title" : "my blog post", "content" : "here blog post", "date" : ISODate("2017-02-17T15:52:24.971Z"), "comments" : [ ] }

删除数据

> db.blog.remove({"title":"my blog post"});
WriteResult({ "nRemoved" : 1 })
> db.blog.find();
remove方法将文档从数据库中永久删除,如果没有任何参数会删除所有的数据。
数据类型
null 用于表示空值或者不存在的字段
布尔型:true/false
数值:shell默认使用64位浮点型数值,整型NunberInt(),NumberLong();
字符串:
日期:{"x":new Date()}
正则表达式:{"x":/foobar/i}
数组:{"x":["a","b","cc"]}
内嵌文档:{"x":{"foo":"bar"}}
对象id:是一个12字节的ID,文档的唯一标识。{"x":ObjectId()}
代码:查询和文档中可以包含任意js代码;{"x":function(){/*.....*/}}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值