注意: 必须更换默认端口27017, 并开启访问限制, 否则有严重的安全风险
一. 安装mongo
- 1.添加MongoDB存储库:首先,您需要添加MongoDB的官方存储库配置到您的系统中。创建一个名为
mongodb-org.repo的文件并打开它:
sudo vi /etc/yum.repos.d/mongodb-org.repo
- 2.将以下内容粘贴到文件中并保存:
[mongodb-org-5.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc
- 3.安装MongoDB:
sudo yum install -y mongodb-org
- 4.启动
sudo systemctl start mongod
二.更改默认端口, 禁用远程链接(默认,无需操作)
- 1.修改配置文件
vim /etc/mongod.conf
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# Where and how to store data.
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
# engine:
# wiredTiger:
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
# network interfaces #新的端口, 默认为27017, 这的bindIp 可改为指定IP, 让其访问,不改默认本机才能访问
net:
port: 28888
bindIp: 127.0.0.1 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
#security: 开启访问限制:enabled, 必须进行身份认证才能访问数据库
security:
authorization: "enabled"
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options
#auditLog:
#snmp:
- 2.添加数据库和集合, 创建用户
# 1.进入控制台
mongo -port 28888
# 2.查看数据库 show dbs, 但是因为启用了访问限制, 所以看不到数据库
- 3.创建用户和密码, 输入mongo进入命令行
# 4.选择数据库
use admin
# 5.创建用户 (创建超管账号, 先要关闭验证,修改 authorization: "disabled",再改回去,重启mongo)
db.createUser({
user: "admin",
pwd: "密码",
roles: [{ role: "root", db: "admin" }]
})
------------
# 1.创建数据库 (如何存在会进入数据库, 不存在则创建)
use db2023
# 2.创建集合
db.createCollection("coll2023")
# 3.给数据库创建用户
db.createUser({
user: "user2023",
pwd: "密码",
roles: [
{ role: "readWrite", db: "db2023" }
]
})
- 登陆和查看数据
mongo --username admin账号 --password 密码 --port 端口 --authenticationDatabase admin
use 数据库
show collections
# 查看条数
db.daily_stock.count()
# 详情- 看前面几行
db.daily_stock.stats()
# 显示一条数据
db.daily_stock.findOne()
# 数据查询
db.daily_stock.find({goods_id:1})
#删除数据
db.collectionName.deleteOne({ key: value })
db.collectionName.deleteMany({ key: value })
三.用可视化客户端链接mongo (由于需要开启远程访问才可用, 慎重, 前面的内容有修改过,后面未调整)
下载地址:
https://www.mongodb.com/try/download/shell
- 远程链接
mongodb://admin:123456@服务器ip:27017/admin
三.在ThinkPHP中使用
- 1.首先如果是windows, 需要安装mongodb扩展, 例如7.3
https://windows.php.net/downloads/pecl/releases/mongodb/1.8.0/php_mongodb-1.8.0-7.3-nts-vc15-x64.zip
- 2.配置数据库链接
return [
// 默认使用的数据库连接配置
'default' => env('database.driver', 'mysql'),
// 数据库连接配置信息
'connections' => [
'mysql' => [
// 数据库类型
],
// 更多的数据库配置信息
'mongodb' => [
'type' => 'mongo',
'hostname' => 'IP',
'database' => 'demo01',
'username' => 'admin',
'password' => '123456',
'hostport' => '27017',
],
],
];
- 3.插入和查询数据
use think\facade\Db;
public function index()
{
// 插入数据
Db::connect('mongodb')
->table('demo01')
->insert(['name'=>'张三','age'=>18]);
Db::connect('mongodb')
->table('demo01')
->insert(['name'=>'李四','age'=>10]);
// 查询数据
$res = Db::connect('mongodb')
->table('demo01')
->where(['name' => '李四', 'age' => 10])
->select();
dd($res);
}
四.在Laravel7中使用
- 1.安装对应版本
composer require jenssegers/mongodb:^3.6
-
webman这里说php7.2以下用3.7, 7.2以上用3.8 webman
-
2.配置config/database.php
'connections' => [
'mysql' => [
'driver' => 'mysql',
//省略
],
'mongodb' => [
'driver' => 'mongodb',
'host' => 'IP',
'port' => '27017',
'database' => '数据库',
'username' => '账号',
'password' => '密码',
],
],
- 3.使用
use Illuminate\Support\Facades\DB;
$mongo = DB::connection('mongodb');
$insert = [
'code' => time()
];
$res = $mongo->collection($this->collection)->insert($insert);
五.在原生PHP项目中使用
- 1.首先安装包
composer require mongodb/mongodb
- 2.在PHP中使用
public function download_stock()
{
// Step 2: Establish MongoDB connection
$client = new \MongoDB\Client("mongodb://admin:填写密码@填写IP:27017/admin");
// Step 3: Select database and collection
$db = $client->selectDatabase($database);
$collection = $db->selectCollection('daily_stock');
// Step 4: Perform the query
$query = ['name' => '张三']; // Replace field_name and value with your actual query criteria
$options = ['projection' => ['_id' => 0]]; // Optional: Projection to exclude _id field from the result
$result = $collection->find($query, $options);
// Step 5: Process the results
foreach ($result as $document) {
// Process each document returned by the query
dump($document);
}
}
六.应用场景
- 1.游戏场景
使用MongoDB存储游戏用户信息、装备、积分等,直接以内嵌文档的形式存储,方便查询、更新。
- 2.物流场景
使用MongoDB存储订单信息、订单状态、物流信息,订单状态在运送过程中飞速迭代、以MongoDB内嵌数组的形式来存储,一次查询就能将订单所有的变更查出来,牛逼plus。
- 3.社交场景
使用MongoDB存储用户信息,朋友圈信息,通过地理位置索引实现附近的人、定位功能。
- 4.物联网场景
使用MongoDB存储设备信息、设备汇报的日志信息、并对这些信息进行多维度分析。
- 1.视频直播
使用MongoDB存储用户信息、点赞互动信息。
六、选择MongoDB的场景总结:
- 数据量大
- 读写操作频繁
- 数据价值较低,对事务要求不高