在Laravel中使用MongoDB的方法示例


Posted in PHP onNovember 11, 2019

MongoDB实用场景

  • 产品用户访问日志,点击埋点统计信息
  • 业务系统环境参数配置信息
  • 业务系统运行时日志,如laravel.log,nginx.log

使用Homebrew在macoOS安装MongoDB PHP Driver

在macOS中,MongoDB 扩展已经从Homebrew仓库中移除,需要通过pecl安装此扩展。

$ sudo pecl install mongodb -v
...

Build process completed successfully
Installing '/usr/local/Cellar/php@7.2/7.2.19/pecl/20170718/mongodb.so'
install ok: channel://pecl.php.net/mongodb-1.5.4
Extension mongodb enabled in php.ini

在项目中,使用phpinfo() 查询PHP扩展安装位置。

...
Configuration File (php.ini) Path  /usr/local/etc/php/7.2
Loaded Configuration File  /usr/local/etc/php/7.2/php.ini
Scan this dir for additional .ini files  /usr/local/etc/php/7.2/conf.d
Additional .ini files parsed  /usr/local/etc/php/7.2/conf.d/ext-opcache.ini, /usr/local/etc/php/7.2/conf.d/php-memory-limits.ini
....

按照ext-opcache.ini配置,创建一个ext-mongodb.ini文件

touch /usr/local/etc/php/7.2/conf.d/ext-mongodb.ini

将mongodb.so扩展写入该文件

[mongodb]
 extension=/usr/local/Cellar/php@7.2/7.2.19/pecl/20170718/mongodb.so

同时在php.ini中移除mongodb.so扩展

extension="mongodb.so" // remove
extension="php_mongodb.so" // remove

重启一下PHP

sudo brew service restart --all

查看是否安装成功

php -m|grep mongodb

在Laravel中使用MongoDB

使用Composer创建一个Laravel项目

composer create-project --prefer-dist laravel/laravel laravel-mongodb-exploer -vvv

成功后,再安装Laravel-MongoDB扩展

composer require jenssegers/mongodb -vvv

按照扩展文档说明,我们添加一个MongoDB数据库连接

//database.php
...
'mongodb' => [
      'driver'  => 'mongodb',
      'host'   => env('MONGODB_HOST', 'localhost'),
      'port'   => env('MONGODB_PORT', 27017),
      'database' => env('MONGODB_DATABASE'),
      'username' => env('MONGODB_USERNAME'),
      'password' => env('MONGODB_PASSWORD'),
      'options' => [
        'database' => 'admin' // sets the authentication database required by mongo 3
      ]
    ],
...
 
 
//.env
... 
MONGODB_HOST=127.0.0.1
MONGODB_PORT=27017
MONGODB_DATABASE=viewers
...

命令行创建MongoDB数据库

macOS中,在命令行执行mongo开启MongoDB Shell

./mongo

使用show dbs查看已有数据库

show dbs;

admin  0.000GB
config  0.000GB
local  0.000GB
viewers 0.000GB

如果没有发现viewers,则创建该数据库。注意只有viewers中存在collection时, 上面结果才会显示viewers

use viewers;

使用数据库后,需要创建colleciton

db.ad_clicks.insert({"ip":"201.35.63.14", "ad_index": 3, "created_at": "2019-06-10 11:34:12"})

使用find查询记录

> db.ad_clicks.find()
{ "_id" : ObjectId("5cf71b34e14620598643d23b"), "ip" : "201.34.46.3", "ad_index" : "2", "created_at" : "2019-06-05 11:34:53" }
{ "_id" : ObjectId("5cf71d3de14620598643d23d"), "ip" : "200.14.145.64", "ad_index" : 1, "created_at" : "2019-06-04 11:11:45" }
{ "_id" : ObjectId("5cf71d3ee14620598643d23e"), "ip" : "200.14.145.64", "ad_index" : 1, "created_at" : "2019-06-04 11:11:45" }
{ "_id" : ObjectId("5cf71d44e14620598643d23f"), "ip" : "200.14.145.64", "ad_index" : 1, "created_at" : "2019-06-04 11:11:45" }
{ "_id" : ObjectId("5cf71d45e14620598643d240"), "ip" : "200.14.145.64", "ad_index" : 1, "created_at" : "2019-06-04 12:34:12" }
{ "_id" : ObjectId("5cfe28823316506991c41786"), "ip" : "201.35.63.14", "ad_index" : 3, "created_at" : "2019-06-10 11:34:12" }

在Laravel DB中查询MongoDB

使用了Laravel-MongoDB扩展,可以基于Eloquent与Query Builder操作MySQL一样的数据php artisan thinker

查询ad_clicks集合所有记录

DB::connection('mongodb')->table('ad_clicks')->get()

查询单个记录

DB::connection('mongodb')->collection('ad_clicks')->find('5cf71b34e14620598643d23b')

修改某个记录

DB::connection('mongodb')->collection('ad_clicks')->where('_id', '5cf71b34e14620598643d23b')->update(['ad_index'=>2]);

在Laravel ORM中查询MongoDB

在项目中,创建一个Model

php artisan make:model Models/AdClick

修改继承父类和数据库连接,AdClick.php

...
use Jenssegers\Mongodb\Eloquent\Model;

class AdClick extends Model
{
  protected $connection = 'mongodb';
 
   /**
   * The attributes that are mass assignable.
   *
   * @var array
   */
  protected $fillable = [];

  /**
   * The attributes that aren't mass assignable.
   *
   * @var array
   */
  protected $guarded = [];
}

继续在Thinker中,插入数据

App\Models\AdClick::create(['ip' => '31.42.4.14', 'ad_index' => 4, 'created_at' => '2019-06-10 18:10:01', 'ip2long' => ip2long('31.42.4.14')]);

统计访问数据

App\Models\AdClick::where('ip', '31.42.4.14')->count()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP中的session永不过期的解决思路及实现方法分享
Apr 20 PHP
php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
Sep 07 PHP
PHP生成Gif图片验证码
Oct 27 PHP
php实现的常见排序算法汇总
Sep 08 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
Jul 02 PHP
浅谈PHP链表数据结构(单链表)
Jun 08 PHP
php7安装yar扩展的方法详解
Aug 03 PHP
php 处理png图片白色背景色改为透明色的实例代码
Dec 10 PHP
PHP微信网页授权的配置文件操作分析
May 29 PHP
php根据地址获取百度地图经纬度的实例方法
Sep 03 PHP
深入理解PHP+Mysql分布式事务与解决方案
Dec 03 PHP
详解PHP用mb_string处理windows中文字符
May 26 PHP
PHP使用递归按层级查找数据的方法
Nov 10 #PHP
php和js实现根据子网掩码和ip计算子网功能示例
Nov 09 #PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
Nov 09 #PHP
php进程(线程)通信基础之System V共享内存简单实例分析
Nov 09 #PHP
PHP多进程简单实例小结
Nov 09 #PHP
PHPUnit + Laravel单元测试常用技能
Nov 06 #PHP
PHP用swoole+websocket和redis实现web一对一聊天
Nov 05 #PHP
You might like
漫荒推荐:画风超赞的国风漫画推荐 超长假期不无聊
2020/03/08 国漫
PHP+MySQL投票系统的设计和实现分享
2012/09/23 PHP
深入PHP许愿墙模块功能分析
2013/06/25 PHP
php插入含有特殊符号数据的处理方法
2016/11/24 PHP
阿里云的WindowsServer2016上部署php+apache
2018/07/17 PHP
PHP观察者模式实例分析【对比JS观察者模式】
2019/05/22 PHP
JQuery中form验证出错信息的查看方法
2013/10/08 Javascript
jQuery中[attribute^=value]选择器用法实例
2014/12/31 Javascript
jQuery+php实时获取及响应文本框输入内容的方法
2016/05/24 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
2016/06/21 Javascript
原生JS实现圆环拖拽效果
2017/04/07 Javascript
AngularJS实现的select二级联动下拉菜单功能示例
2017/10/25 Javascript
手把手教你vue-cli单页到多页应用的方法
2018/05/31 Javascript
vue中使用rem布局代码详解
2019/10/30 Javascript
js实现验证码干扰(动态)
2021/02/23 Javascript
[15:57]教你分分钟做大人:斧王
2014/10/30 DOTA
Python常用模块介绍
2014/11/21 Python
python实现12306火车票查询器
2017/04/20 Python
python 矩阵增加一行或一列的实例
2018/04/04 Python
基于Python实现定时自动给微信好友发送天气预报
2018/10/25 Python
pygame实现雷电游戏雏形开发
2018/11/20 Python
用Python实现BP神经网络(附代码)
2019/07/10 Python
Python实现蒙特卡洛算法小实验过程详解
2019/07/12 Python
python实现桌面气泡提示功能
2019/07/29 Python
python中class的定义及使用教程
2019/09/18 Python
C#面试常见问题
2013/02/25 面试题
警察先进个人事迹材料
2014/05/16 职场文书
节约用电标语
2014/06/17 职场文书
法人代表身份证明书及授权委托书
2014/09/16 职场文书
学校领导班子群众路线整改措施
2014/09/16 职场文书
出生证明范本
2015/06/15 职场文书
2016廉政教育学习心得体会
2016/01/25 职场文书
JavaScript继承的三种方法实例
2021/05/12 Javascript
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
2021/11/11 Python
Tomcat项目启动失败的原因和解决办法
2022/04/20 Servers
Mysql数据库group by原理详解
2022/07/07 MySQL