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可视化软件里面查看数据
在这里插入图片描述