NoSQL - MongoDB

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统

非关系型数据库

2007年10月,MongoDB由10gen团队所发展。2009年2月首度推出

端口:27017

菜鸟教程: https://www.runoob.com/mongodb/mongodb-tutorial.html

官方文档: http://www.mongoing.com/docs/introduction.html

BSON

BSON(Binary Serialized Document Format)是一种类JSON的二进制形式的存储格式 ,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型

{
    name "Tiger"
    age 18,
    status "",
    group ["news","sprts"]
}

一、安装

下载:

https://www.mongodb.org/dl/linux/x86_64

安装:

tar -xf mongodb-linux-x86_64-4.0.10.tgz
mv mongodb-linux-x86_64-4.0.10 /usr/local/mongodb

创建存储目录、日志目录与配置文件目录

cd /usr/local/mongodb
mkdir data
mkdir logs
mkdir conf

启动服务1:

 ./mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs/mongodb.log --fork

启动服务2:

添加mongodb.service

# vim /usr/lib/systemd/system/mongodb.service

[Unit]
Description=MongoDB
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/mongodb/bin/mongod --shutdown -f /usr/local/mongodb/conf/mongodb.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target

# chmod +x /usr/lib/systemd/system/mongodb.service
# systemctl start mongodb

添加环境变量:

echo `export PATH=$PATH:/usr/local/mongodb/bin`  >> /etc/profile
source /etc/profile

使用:

mongo

二、基本操作

1.数据库

#切换数据库,没有则会创建
use tiger
#查看所有数据库信息
show dbs
#获取当前数据库名称
db.getName()
#删除当前所有在数据库
db.dropDatabase()

2.集合

#1.创建集合
db.createCollection("集合名称")
#2.删除集合
db.集合名称.drop()
#3.删除集合中内容
db.集合名称.remove({})
#4.查看所有集合
show tables
show collections

3.插入文档

#插入数据时,没有表则自动创建
#1.一般插入
db.goods.insert({id:1,title:'M9',price:2799})
#2.插入多维数据
db.goods.insert({
    title:"M6",
    price:1999,
    size:{
        width:10,
        height:20
    }
})
#3.插入数组数据
db.goods.insert({
    title:"M8",
    price:1999,
    size:{
        width:12,
        height:22
    },
    color:['black','while','red']
})

4.查询

#1.查询所有数据
db.goods.find()
#2.查询所有数据,格式化输出
db.goods.find().pretty()
#3.查询某条数据
db.goods.findOne()
db.goods.findOne({title:"M9"})
#4.范围查询
# 小于:$lt  小于等于:$lte 
# 大于:$gt  大于等于:$gte
# 不等于:$ne
db.goods.find({ price:{'$gt':2000} })
#5.AND
db.goods.find({
    title:"M9",
    price:2799
})
db.goods.find({
    price:{
        '$gt':2000,
        '$lt':3000 
    }
})
#6.多维数据查询
db.goods.find({'size.height':20})
#7.数组数据查询
  #(1)只需满足一个即可
  db.goods.find({color:'black'})
  #(2)全部满足
  db.goods.find({color:{'$all':['red','black']}})
#8.Or
db.goods.find({$or:[{title:"M10"},{price:2799}]})
db.goods.find({
    $or:[
        {title:"M10"},
        {price:2799}
    ]
})

4.1排序

#排序 sort
#1表示升序,-1表示降序
db.goods.find({},{_id:0,title:1,price:1}).sort({price:1})

4.2其他:

#1.显示特定字段
#注意:1表示显示 0表示不显示
#一次查询中只能有1或者0,不能同时存在 ( _id 除外)
db.goods.find({title:"M6"},{_id:0,title:1,price:1})
#2.查询记录数 count
db.goods.count()
#3.获取前几个
db.goods.find().limit(num)
#4.跳过特定数量记录
db.goods.find().skip(num)

5.修改

#1.修改一个字段值,其他字段不变
db.goods.update({title:'M8'},{'$set':{price:1666}})
#2.修改一个字段值,其他字段删除
db.goods.update({title:'M8'},{price:1666})

6.删除

#1.删除文档
db.goods.remove({条件})
#2.删除字段
 #普通字段
 db.goods.update({title:"M10"},{$'unset':{color}})
 #删除多维数据字段
 db.goods.update({title:"M10"},{'$unset':{size:{}}})
 #删除数组字段
 db.goods.update({title:"M10"},{'$unset':{color:[]}})
#3.根据 _id 删除文档
db.goods.remove({_id:ObjectId("5dd3a1cb934855801065cba8")})

三、安全设置

连接远程主机:

/usr/local/mongodb/bin/mongo IP

1.创建账户

用于远程登录

/usr/local/mongodb/bin/mongo
use admin
db.createUser({user:"admin",pwd:"admin",roles:["root"]})

2.开启验证

cd /usr/local/mongodb
mkdir conf
vim conf/mongodb.conf

文件内容:

dbpath=/usr/local/mongodb/data
logpath=/usr/local/mongodb/logs/mongodb.log
fork=true
logappend=true
port=27017
auth=true #是否开启验证
bind_ip=127.0.0.1,10.1.1.45

3.测试

#方式1
/usr/local/mongodb/bin/mongo 127.0.0.1

use admin
db.auth('admin','admin')
#方式2
mongo 127.0.0.1 -u admin --authenticationDatabase=admin

四、PHP 添加扩展

下载: https://pecl.php.net/package/mongodb

安装:

tar -xf mongodb-1.5.3.tgz
cd mongodb-1.5.3/
phpize
./configure && make && make install
ls  /usr/local/php/lib/php/extensions/no-debug-zts-20170718/

修改配置文件:

 vim /usr/local/php/etc/php.ini
 #908
 extension=mongodb.so

重启PHP

service php-fpm restart

创建测试代码:

vim /www/shop/public/test.php
<?Php
    phpinfo();
?>

五、备份与还原

1.全库

备份:

mongodump -h 10.1.1.45 -u admin -p admin --authenticationDatabase=admin
#会备份到当前目录的 dump 目录中

还原:

mongorestore -h 10.1.1.45 -u admin -p admin --authenticationDatabase=admin  --dir dump

2.特定库

备份:

mongodump -h 10.1.1.45 -u admin -p admin --authenticationDatabase=admin -d tiger -o /tmp/mongoDB

还原:

mongorestore -h 10.1.1.45 -u admin -p admin --authenticationDatabase=admin -d tiger --dir /tmp/mongoDB/tiger

其他

1.数据库排行榜

https://db-engines.com/en/ranking

2.可视化管理工具

Studio 3T : https://studio3t.com/

Last modification:December 28th, 2019 at 11:03 pm