mongodb介绍,安装:
mongodb
MongoDB 是一个介于关系数据库和非关系数据库之间的产品
缺点:不支持连表查询,不支持sql语句,不支持事务存储过程等,所以不适合存储数据间关系比较复杂的数据,一般主要是当做一个数据仓库来使用。
需要掌握几个概念
文档:是mongoDB中数据的基本单元,区分大小写的数据类型
集合:是一组文档,多个文档组成一个集合
数据库:
多个集合可以组成数据库。一个mongoDB实例可以承载多个数据库,他们之间完全独立。
一个数据库中可以有多个集合。
一个集合中可以有多个文档。
安装mongodb:
下载、双击安装、服务端(服务器启动,命令行启动) 端口27017
./mongodb --dbpath ../data --logpath ../log.log --port 27017 [--fork]
数据库目录、日志目录、端口
常用指令增删改查
入门语句:
创建数据库:use 数据库名
查看数据库:show 数据库名
创建集合:db.集合名.insert({})
查看集合:db、show tables
查询集合里面的文档:
db.集合名.find() 查询所有
db.集合名.findOne() 查询第一个文档
删除集合:db.集合名.drop();
删除数据库:
use 数据库
db.dropDatabase()
帮助命令:help、db.help()、db.集合名.help()
增删改查操作
添加文档:db.集合名.insert({k1:’v1’,k2:’v2’…..})
删除文档:db.集合名.remove({条件})(不写条件删除所有的文档)
$lt , $lte , $gt , $gte ( < , <= , > , >= ), $ne ( <> ) ,$in , $nin , $or , $not,
$mod (取模), $exists, $where
更新文档:
db.集合名.update({条件},{新的文档},是否新增,是否修改多条)
db.集合.update(条件,新文档, 是否新增, 是否修改多条)
db.集合名.update({条件},{修改器名称:{修改的键:修改的新值}})
查询文档:
db.集合名.find({条件}).sort({}).skip().limit().count()
用户权限及索引
用户管理(权限控制)
mongodb里面的用户是属于数据库的,每个数据库有自己的管理员,管理员登录后,只能操作所属的数据库。
创建超级管理员:
use admin
db.createUser({ user:'root', pwd:'123456', roles:[{role:'root',db:'admin'}] })
修改 Mongodb 数据库配置文件:
mongod.cfg:
security:
authorization: enabled
重启 mongodb 服务:
超级管理员账户连接数据库:
mongo 数据库名称 -u 用户名 -p 密码
mongo admin -u 用户名 -p 密码
远程连接:mongo IP地址:端口/数据库名称 -u 用户名 -p 密码
给PHP库创建一个普通管理员:
use php
db.createUser( { user: "phpadmin", pwd: "123456", roles: [ { role: "dbOwner", db: "php" } ] } )
Mongodb 账户权限配置中常用的命令:
show users; #查看当前库下的用户
db.dropUser("eggadmin") #删除用户
db.updateUser( "admin",{pwd:"password"}); #修改用户密码
db.auth("admin","password"); #密码认证
Mongodb 数据库角色:
(1)数据库用户角色:read、readWrite;
(2)数据库管理角色:dbAdmin、dbOwner、userAdmin;
(3)集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
(4)备份恢复角色:backup、restore;
(5)所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、 dbAdminAnyDatabase
(6)超级用户角色:root
mongodb中索引
索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得 更快
创建索引:
db.集合名.ensureIndex({键名:1}) 1是升续 -1是降续
多列索引(复合索引):
db.集合名.ensureIndex({field1:1/-1, field2:1/-1});
子文档索引:
db.集合名.ensureIndex({filed.subfield:1/-1});
唯一索引:
db.集合名.ensureIndex({name:-1},{unique:true})
查看索引:
db.集合名.getIndexes();
explain executionStats 查询具体的执行 时间
db.tablename.find().explain( "executionStats" )
关注输出的如下数值:explain.executionStats.executionTimeMillis
删除索引:
单:db.集合名.dropIndex({filed:1/-1});
所有:db.集合名.dropIndexes();
重建索引:
mysql:optimize table 表名
整理索引碎片
db.集合名.reIndex()
索引使用注意事项:
(1)创建索引的时候,注意1是正序创建索引 -1是倒叙创建索引
(2)索引的创建在提高查询性能的同时会影响插入性能,对于经常查询少插入的文档可以考虑用索引
(3)复合索引要注意索引的先后顺序。
(4)每个键全建立索引不一定就能提高性能,索引不是万能的。
(5)在做排序工作的时候如果是超大数据量也可以考虑加上索引用来提高排序的性能。
mongdb中数据导出与导入、主从复制、php操作mongodb及linux安装
mongdb中数据导出与导入
利用mongoexport
-h host主机
--port 端口
-d 指明使用的库
-c 指明要导出的集合
-o 指明要导出的文件名
--csv指定导出的csv格式
-q 过滤导出
-f field1 field2 列名
-u username 用户名
-p password 密码
导入:mongoexport -h localhost -d phpDB -c phpList -o e:/php.json -u phpadmin -p 123456
使用mongoimport命令
-d 待导入的数据库
-c 待导入的集合(不存在会自己创建)
--type csv/json(默认)
--file 备份文件名称包含路径
导出:mongoimport -h localhost -d phpDB -c phpList --file e:/php.json -u phpadmin -p 123456
主从复制(读写分离)
主从复制是一个简单的数据库同步备份的集群技术。
在数据库集群中要明确的知道谁是主服务器,主服务器只有一台。
从服务器要知道自己的数据源也就是对于的主服务是谁。
--master用来确定主服务器,--slave和--source来控制从服务器。
主:--port --dbpath –logpath --master
从:--port –dbpath –logpath –slave –source 127.0.0.1:1111
php操作mongodb
下载mongodb扩展php(版本、线程、vc、位数)
移动ext、打开php.ini
查看:phpinfo
MongoDB\Driver\Manager("mongodb://phpadmin:123456@localhost:27017/php");
插入:
$bulk = new MongoDB\Driver\BulkWrite;
$bulk->insert(['name'=>'刘备','age'=>12,'email'=>'liubei@sohu.com']);
$manager->executeBulkWrite('php.stu', $bulk);
查询:
$filter = ['age'=>['$gt'=>16]];
$options = [
'projection'=>['_id'=>0],
'sort'=>['age'=>1]
];
$query = new MongoDB\Driver\Query($filter, $options);
$data = $manager->executeQuery('php.stu', $query);
更新:
$bulk = new MongoDB\Driver\BulkWrite;
$bulk->update(
['age' => 12],
['$set' => ['name' => '刘备被', 'email' => 'liubeibei@sohu.com']],
['multi' => false, 'upsert' => false]
);
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);
$result = $manager->executeBulkWrite('php.stu', $bulk, $writeConcern);
删除:
$bulk = new MongoDB\Driver\BulkWrite;
$bulk->delete(['age' => 22], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
//$bulk->delete(['x' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);
$result = $manager->executeBulkWrite('php.stu', $bulk, $writeConcern);
linux安装mongodb:
./mongodb --dbpath ../data --logpath ../log.log --port 27017 --fork
数据库目录、日志目录、端口