参考网上资料安装mongoDB并在php.ini开启mongoDB扩展(通过phpinfo()确定是否安装完成)
composer命令:
composer require jenssegers/mongodb ^3.8 -vvv
在app/config/app.php文件中引入
'providers' => [
Jenssegers\Mongodb\MongodbServiceProvider::class,
]
'aliases' => [
'Mongo' => Jenssegers\Mongodb\MongodbServiceProvider::class,
]
在.env 文件中加入(test为数据库)
MONGODB_HOST=127.0.0.1
MONGODB_POST=27017
MONGODB_DB=test
DB_USERNAME=
DB_PASSWORD=
在数据库配置文件 config/database.php 的 connections 中加入
'mongodb' => [
'driver' => 'mongodb',
'host' => env('MONGODB_HOST', '127.0.0.1'),
'port' => env('MONGODB_POST', '27017'),
'database' => env('MONGODB_DB', 'test'),
'username' => env('MONGODB_USER', ''),
'password' => env('MONGODB_PASSWORD', ''),
],
并且把默认的数据库配置
'default' => env('DB_CONNECTION', 'mysql'),
改成
'default' => env('DB_CONNECTION', 'mongodb'),
代码
Route::get('mongodb',[\App\Http\Controllers\Controller::class,'mongodb']);
function mongodb(){
//选择使用one集合插入数据
DB::insert([
'name' => 'mongodb',
'age' => 18
]);
//查询所有数据
$res = DB::collection('one')->get();
dd($res);
}
效果
补充
如果没有修改默认的数据库配置为mongodb,则每次操作需要
DB::connection('mongodb')->...
模型操作
修改继承模型
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class One extends \Jenssegers\Mongodb\Eloquent\Model
{
use HasFactory;
//文档名
protected $collection = 'one';
//设置id
protected $primaryKey = '_id';
//无黑名单
protected $guarded=[];
}
就可以这样使用
$arr=One::get();
dd($arr);
最后补充一点mongoDB的概念:
nosql 数据库
端口号:27017
旨在为 WEB 应用提供可扩展的高性能数据存储解决方案
是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的
将数据存储为一个文档,数据结构由键值(key=>value)对组成
数据模型结构:BSON(与JSON类似)
和MySQL结构对比:
MySQL:数据库,数据表,记录行,字段,索引,主键(id)
mongoDB:数据库,集合,文档,域,索引,主键(_id)
MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
使用原因:
读写快(nosql ,BSON,key=>value)
易伸缩,自动故障转移。易伸缩指的是提供了分片能力,能对数据集进行分片,数据的存储压力分摊给多台服务器。自动故障转移是副本集的概念,MongoDB能检测主节点是否存活,当失活时能自动提升从节点为主节点,达到故障转移
数据模型(BSON)因为是面向对象的,所以可以表示丰富的、有层级的数据结构,比如博客系统中能把“评论”直接怼到“文章“的文档中,而不必像myqsl一样创建三张表来描述这样的关系