mongoDB操作文档(全部)
mongoDB
1、创建、查询数据库
创建数据库
use dade
查询数据库
show dbs
2、创建集合、查看
创建集合插入数据
db.集合名.insert({})
db.dade.insert({dade:'大得',age:18})
查看集合
show tables
查看集合中的数据
db.集合名.find() 查询所有
db.dade.find()
db.集合名.findOne() 查询第一个文档
3、删除集合、删除数据库
删除集合
db.集合名.drop();
删除数据库
use 数据库
db.dropDatabase()
4、操作符
$lt , $lte , $gt , $gte ( < , <= , > , >= ), $ne ( <> ) ,$in , $nin , $or , $not,
$mod (取模), $exists, $where
4、增、删、改、查
1、增
use dade 切换数据库
db.集合名.insert({name:’xiaobai’,spc:{weight:100,address:’guangzhou’}})
db.dade.insert({dade:'大得',age:1818})
2、删除
db.dade.remove({age:1818})
删除大于18的
db.dade.remove({age:{'$gt':18}})
3、修改
这个age大于18的修改name值,注意其他值丢失
db.dade.update({age:{'$gt':18}},{name:'修改'})
这个修改其他数据不丢失,修改age等于18的
db.dade.update({age:18},{'$set':{name:10}})
这个数据统计,如是20,+10,操作后是30
db.dade.update({age:1818},{'$inc':{name:10}})
4、查文档,dade是集合名
查所有
db.dade.find()
查第一条
db.dade.findOne();
查age等于18的
db.dade.find({age:18})
查age大于18的
db.dade.find({age:{'$gt':18}})
查询只拿name值,1只表示显示name值
db.dade.find({},{name:1})
排除age,0表示排除
db.dade.find({},{age:0})
升序,根据年龄升序
db.集合名.find().sort({age:1})
倒序,根据年龄降序
db.集合名.find().sort({age:-1})
显示集合前三的文档
db.集合.find().limit(3)
集合分页
db.集合.find().skip(2).limit(5)
获得集合总条数
db.集合名.count()
5、模糊查询
/66/,/相当mysql的%
db.dade.find({dade:/66/})
6、$in查询
包含
db.dade.find({age:{'$in':[18,1818]}})
不包含
db.dade.find({age:{'$nin':[18,1818]}})
7、mongoDB账号管理
登录mongodb的客户端,使用如下命令
1、创建超级管理员
use admin
db.createUser({ user:'root', pwd:'123456', roles:[{role:'root',db:'admin'}]})
2、修改 Mongodb 数据库配置文件,enabled开启
security:
authorization: enabled
3、重启 mongodb 服务
4、创建普通账号
use dade
db.createUser( { user: "phpadmin", pwd: "123456", roles: [ { role: "dbOwner", db: "php" } ] } )
5、查看当前库下的用户
show users;
6、删除用户
db.dropUser("dade")
7、修改密码
db.updateUser( "admin",{pwd:"password"}); #修改用户密码
db.auth("admin","password"); #密码认证
8、Mongodb 数据库角色
(1)数据库用户角色:read、readWrite;
(2)数据库管理角色:dbAdmin、dbOwner、userAdmin;
(3)集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
(4)备份恢复角色:backup、restore;
(5)所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、 dbAdminAnyDatabase
(6)超级用户角色:root
9、Mongodb 中索引
1、为name创建索引
db.集合名.ensureIndex({name:1})
db.集合名.ensureIndex({键名:1}) 1是升续 -1是降续
2、多列索引
db.集合名.ensureIndex({field1:1/-1, field2:1/-1});
3、子文档索引
db.集合名.ensureIndex({filed.subfield:1/-1})
如下文档可以建立子文档索引
{name:’诺基亚手机1’,price:12.34,spc:{weight:100,area:’纽约’}}
{name:’诺基亚手机2’,price:42.34,spc:{weight:200,area:’伦敦’}}
比如要查询weight等于100的文档。
db.goods.find({‘spc.weight’:100})
根据当前案例,我们建立子文档索引
db.集合名.ensureIndex({'spc.weight':1})
4、唯一索引
db.集合名.ensureIndex({name:-1},{unique:true})
5、查看索引
常用命令:
(1)查看当前索引状态: db.集合名.getIndexes();
(2)详情查看本次查询使用哪个索引和查询数据的状态信息。
explain executionStats 查询具体的执行 时间
db.tablename.find().explain( "executionStats" )
关注输出的如下数值:explain.executionStats.executionTimeMillis
6、删除索引
删除单个索引
db.集合名.dropIndex({filed:1/-1});
删除所有索引
db.集合名.dropIndexes();
注意:在删除所有的索引时,主键索引会保留。
7、重建索引
一个表经过很多次修改后,导致表的文件产生空洞,索引文件也如此.
可以通过索引的重建,减少索引文件碎片,并提高索引的效率.
类似mysql中的optimize table
mysql里面使用optimize table语法:optimize table 表名
语法:db.集合名.reIndex()
8、索引使用注意事项
(1)创建索引的时候,注意1是正序创建索引 -1是倒叙创建索引
(2)索引的创建在提高查询性能的同时会影响插入性能,对于经常查询少插入的文档可以考虑用索引
(3)复合索引要注意索引的先后顺序。
(4)每个键全建立索引不一定就能提高性能,索引不是万能的。
(5)在做排序工作的时候如果是超大数据量也可以考虑加上索引用来提高排序的性能。
10、Mongodb 中数据导出与导入
1、导出数据
导入/导出可以操作的是本地的mongodb服务器,也可以是远程的,所以,都有如下通用选项。
利用mongoexport
-h host主机
--port 端口
-d 指明使用的库
-c 指明要导出的集合
-o 指明要导出的文件名
--csv指定导出的csv格式
-q 过滤导出
-f field1 field2 列名
-u username 用户名
-p password 密码
如下操作,
注意:如果端口是默认的可以不使用--port来指定端口。
比如我们要导出php库下面的Java集合,
E:\Program Files\MongoDB\Server\4.0\bin>mongoexport -h localhost -d php -c java -o e:/nihao.json -u phpadmin -p 123456
2、导入数据
使用mongoimport命令
-d 待导入的数据库
-c 待导入的集合(不存在会自己创建)
--type csv/json(默认)
--file 备份文件名称包含路径
例1: 导入json
./bin/mongoimport -h --port 端口号 -d test -c goods --file ./goodsall.json
例2: 导入csv
./bin/mongoimport -h --port 端口号 -d test -c goods --type csv -f goods_id,goods_name --file ./goodsall.csv
./bin/mongoimport -h --port 端口号 -d test -c goods --type csv --headline -f goods_id,goods_name --file ./goodsall.csv
案例:把刚才导出的nihao.json文件导入到php库里面的user集合里面。
E:\Program Files\MongoDB\Server\4.0\bin>mongoimport -h localhost -d php -c nihao --file e:/nihao.json -u phpadmin -p 123456
11、主从复制(读写分离)
可以通过不同端口来模拟多台mongodb服务器
具体的配置步骤
1、启动主服务器
--port --dbpath –logpath --master
2、启动从服务器
--port –dbpath –logpath –slave –source 127.0.0.1:1111
3、客户端登陆到主服务器
添加一些数据,测试是否同步到从服务器
如下在主服务器里面,添加了一些文档
第一步:客户端登录到主服务器,添加一些文档
mongo localhost:1111
登陆到从服务器,查看是否有数据
mongo localhost:2222
如果有数据,则成功了
12、tp6使用mongodb
配置数据库,在数据库配置文件
'mongo'=>[
'type' => 'mongo',
'hostname' => '127.0.0.1',
'database' => 'database',
'username' => '',
'password' => '',
'hostport' => '27017'
]
新增
$res = Db::connect('mongo')->table('news')->insertGetId($data);
查询
$res = Db::connect('mongo')->table('news')->select();
单条件查询
$mangoList = Db::connect('mongo')->table('news')->where('id','76')->select();
更新
$mangoList = Db::connect('mongo')->table('news')->where('id','76')->update([
'title'=>'eeeeeeeeeee'
]);
删除
$mangoList = Db::connect('mongo')->table('news')->where('id','75')->delete();
$mangoList = Db::connect('mongo')->table('news')->where('_id','6021506535f34b1ef9497352')->delete();
13、php操作
插入
$mongo = new MongoClient('mongodb://localhost:27017');
$db = $mongo->mf; //选择数据库
$collection = $db->friend; //选择文档集合
$doc = [ //定义一个文档,即一个数组
'First Name' = >'Jet', 'Last Name' = >'Wu', 'Age' = >26, 'Phone' = >'110', 'Address' = >['Country' = >'China', 'City' = >'Shen Zhen'], 'E-Mail' = >['123456@qq.com', '666666@sina.com', '8888888@qq.com', '77887788@qq.com']];
$res = $collection->insert($doc);
查询
$mongo = new MongoClient('mongodb://localhost:27017');
$db = $mongo - >mf;
$collection = $db->friend;
$cursor = $collection->find(['Address'=>'China']);
14、php安装mongodb扩展
https://windows.php.net/downloads/pecl/releases/mongodb/
注意:扩展文件
下载合适的php_mongodb.dll文件。
(1)php的版本
(2)是否是线程安全的thread safe(ts)
(3)是vc几的
(4)php是32位的还是64位的。
步骤:
(1)把对应的扩展,拷贝到php的安装目录里面的ext目录里面。
注意:拷贝后,改名为php_mongo.dll
(2)打开php.ini文件,引入该扩展,
(3)重启apache,
使用phpinfo()函数测试
tp6配置
安装
composer require topthink/think-mongo
// 更多的数据库配置信息
'mongo'=>[
'type' => 'mongo',
'hostname' => '127.0.0.1',
'database' => '数据库名称',
'username' => '',
'password' => '',
'hostport' => '27017'
]
操作篇
https://blog.csdn.net/qq_34631220/article/details/128173120?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22128173120%22%2C%22source%22%3A%22qq_34631220%22%7D