Laravel框架使用MongoDB

laravel框架 mongo使用

前置条件: PHP本地安装mongodb扩展

laravel框架中使用mongodb, 需要使用Jenssegers的MongoDB包

1.引入MongoDB

composer require jenssegers/mongodb

安装完成后, laravel会自动加载MongoDB服务提供者

2.配置数据库连接

在config/database.php配置mongo并返回

$mongoDB = [
    'driver' => 'mongodb',
    'host' => env('DB_MG_HOST', 'localhost'),
    'port' => env('DB_MG_PORT', 27017),
    'database' => env('DB_MG_DATABASE'),
    'username' => env('DB_MG_USERNAME'),
    'password' => env('DB_MG_PASSWORD'),
    'options' => [
        'database' => 'admin'
    ],
];
'mongodb' => array_merge($mongoDB, ['database' => env('DB_MG_DATABASE')]),

在connections返回mongodb

3.使用MongoDB

在使用上可以通过DB方式指定连接及数据集合, 或是通过laravel模型的方式

1.DB

# 插入

DB::connection("mongodb")   // 指定连接mongodb
->collection("user_extend")    // 指定集合
->insert([
    "name" => "张三",
    "mobile" => 15812345678,
]);

这里指定的mongodb就是在database文件配置的connections.mongodb

# 查询

// 获取所有符合条件的数据
DB::connection("mongodb")->collection("user_extend")->get();
// 满足条件的第一条
DB::connection("mongodb")->collection("user_extend")->where("mobile", 15812345678)->first();

#编辑

DB::connection("mongodb")->collection("user_extend")->where("mobile", 15812345678)->update(["state" => 1]);

#删除

DB::connection("mongodb")->collection("user_extend")->where("mobile", 15812345678)->delete();

2.模型

1.创建user_extend的mongo模型

<?php

namespace App\Models\mongo;


use Jenssegers\Mongodb\Eloquent\Model;

class UserExtend extends Model
{
    protected $connection = 'mongodb'; // 指定连接
    protected $collection = 'user_extend';  // 指定集合
    protected $primaryKey = '_id';

    protected $guarded = []; // 在create方法不能被赋值的字段
}

2.模型操作数据

# 新增
$userExtend = new UserExtend([
    "name" => "李四",
    "mobile" => 13312345678,
]);
$userExtend->save();

#模型插入
UserExtend::query()->insert(["name" => "李2", "mobile" => 15512345678]);

#查询
UserExtend::query()->where("mobile", 15512345678)->first(); // 满足条件的第一条
UserExtend::query()->where("mobile", 15512345678)->get(); // 获取所有符合条件的数据

#编辑
// 查询一条数据, 赋值后保存
$first = UserExtend::query()->where("mobile", 15512345678)->first();
$first->fill(["state" => 1])->save();
// 按条件更新
UserExtend::query()->where("mobile", 15512345678)->update(["state" => 1]);

#删除
UserExtend::query()->where("mobile", 15512345678)->delete();

#mongodb查询时, 需要注意数据类型一致

4.mongo聚合

示例: 统计状态启用18-36岁的用户, 按性别及爱好分组, 统计人数及用户开销

// 统计状态启用18-36岁的用户, 按性别及爱好分组, 统计人数及用户开销
$list = UserExtend::query()->raw(function ($q) {
    $match = [
        "state" => 1,
        "age" => [
            '$gte' => 18,
            '$lte' => 36,
        ],
    ];
    $groupBy = [
        "habit" => '$habit',
        "sex" => '$sex',
    ];
    $aggregate[]['$match'] = $match;

    $aggregate[]['$group'] = [
        '_id' => $groupBy,
        'habit' => ['$first' => '$habit'], // 爱好分组
        'sex' => ['$first' => '$sex'],  // 年龄

        'count' => ['$sum' => 1], // 用户开销
        'overhead_total' => ['$sum' => '$overhead_amount'], // 用户开销
    ];

    return $q->aggregate($aggregate);
});

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值