laravel 使用 MongoDB

发布于:2024-05-17 ⋅ 阅读:(22) ⋅ 点赞:(0)

MongoDB

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。MongoDB 提供了面向文档的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂的数据类型,是一款非常流行的文档类型数据库

使用场景
  • 网站实时数据处理。它非常适合实时的插入、更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性.
  • 缓存。由于性能很高,它适合作为信息基础设施的缓存层。在系统重启之后,由它搭建的持久化缓存层可以避免下层的数据源过载
  • 高伸缩性的场景。非常适合由数十或数百台服务器组成的数据库,它的路线图中已经包含对MapReduce引擎的内置支持
不适用场景
  • 要求高度事务性的系统。
  • 传统的商业智能应用。
  • 复杂的跨文档(表)级联查询。
特点
  • 模式自由,意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里
  • 面向集合存储,容易存储对象类型的数据,一个集合中可以存储无限多的文档。
  • 支持完全索引,可以在任意属性上建立索引,包含内部对象
  • 文件存储格式为BSON(JSON 的一种扩展)。BSON 是对二进制格式的JSON 的简称,BSON 支持文档和数组的嵌套。
名词概念
  • 文档:
    文档是 MongoDB 中数据的基本单位,类似于关系数据库中的行。多个键及其关联的值有序地放在一起就构成了文档。文档可以嵌套。文档中的键类型只能是字符串(相当于就是一个json对象)。列如:
{“greeting”:“hello,world”,“foo”: 3}
  • 集合:
    集合就是一组文档,类似于关系数据库中的表。集合是无模式的,集合中的文档可以是各式各样的。

  • 数据库:
    MongoDB 中多个文档组成集合,多个集合组成数据库。一个MongoDB 实例可以承载多个数据库。它们之间可以看作相互独立,每个数据库都有独立的权限控制

sql与mangodb名词对比
sql mangodb
表(Table) 集合(Collection)
行(Row) 文档(Document)
列(Col) 字段(Field)
主键(Primary Key) 对象 ID(Objectid)
索引(Index) 索引(Index)

安装

本文以windows环境安装测试。

下载

官网:

https://www.mongodb.com/

在这里插入图片描述

在这里插入图片描述

步骤
  • 点击“NEXT”

    在这里插入图片描述

  • 勾选同意协议,点击“Next"

    在这里插入图片描述

  • 选择自定义安装

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

  • 安装完成打开软件

    在这里插入图片描述

laravel 操作mango

首先需要你确定是否安装php mongodb的扩展,在phpinfo里面查看。还需要扩展对应composer包的版本

本文环境 php8.0.2/MongoDB 5.0.5/laravel9/composer 2.2.6

安装laravel-mongodb

在项目根目录执行:

composer require mongodb/laravel-mongodb

此处如果php mongodb的扩展不匹配会安装失败,此处需要mongodb的扩展,1.12以上

在这里插入图片描述

而我的版本是1.11

在这里插入图片描述

重新安装扩展,去官网下载扩展

https://windows.php.net/downloads/pecl/releases/mongodb/

找到对应的扩展,下载,然后安装好扩展,注意php版本,nts和ts的区别

在这里插入图片描述

再进行composer下载

composer require mongodb/laravel-mongodb:^3.9 -vvv

在这里插入图片描述

使用

laravel-mongodb的中文官方文档:https://www.mongodb.com/zh-cn/docs/drivers/php/laravel-mongodb/current/

  • 更改配置

在env文件中写入以下配置

#mangodb 连接
DB_CONNECTION=mongodb
MONGODB_HOST=127.0.0.1
MONGODB_POST=27017
MONGODB_DB=test
  • 创建provider

    找到laravel的根目录下面的config目录,打开app.php文件,在providers数组里面,添加以下代码:

Jenssegers\Mongodb\MongodbServiceProvider::class

由于我上面安装的laravel-mongodb:^3.9 版本的,在4.0以前的版本,laravel-mongodb这个包叫:jenssegers/mongodb
所以在添加provider的时候需要注意引入名称。

在这里插入图片描述

  • 创建模型

在Models目录下面创建animal.php文件,写入以下代码:

<?php

namespace App\Models;

//mongodb的模型,注意laravel-mongodb4.0以下的版本,命名空间的问题
use Jenssegers\Mongodb\Eloquent\Model;


class Animal extends Model
{
    //连接类型
    protected $connection = 'mongodb';
    //需要批量更新和写入的字段
    protected $fillable = ['name', 'age', 'sex', 'hobby'];
}
  • 编写curd

在控制器中添加一个测试类,编写逻辑

<?php

namespace App\Http\Controllers;

use App\Models\Animal;
use Illuminate\Routing\Controller as BaseController;

class TestController extends BaseController
{
    public function create(){
        //创建数据
        $data=[
            'name'=>'狗',
            'age'=>2,
            'sex'=>1,
            'hobby'=>'吃骨头'
        ];
        Animal::query()->create($data);
    }
    public function show(){
        //查询数据
        $data=Animal::query()->where('name','狗')->first();
        $data=Animal::query()->where('_id','663c2baa3d76000021004822')->first();
        dd($data);
    }
    
    public function uppdate(){
        //更新数据
        Animal::query()->where('_id','663c2baa3d76000021004822')->update([
            'name'=>'小狗'
        ]);
    }
    
    public function delete(){
        //删除数据
        Animal::query()->where('_id','663c2baa3d76000021004822')->delete();
    }
}

可以在mongodb可视化软件里面查看数据
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到