在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初学入门
Nov 19 PHP
php预定义常量
Dec 25 PHP
建站常用13种PHP开源CMS比较
Aug 23 PHP
PHP中防止SQL注入实现代码
Feb 19 PHP
PHP array_multisort()函数的使用札记
Jul 03 PHP
php自动加载autoload机制示例分享
Feb 20 PHP
PHP获取本周第一天和最后一天示例代码
Feb 24 PHP
php抛出异常与捕捉特定类型的异常详解
Oct 26 PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
Nov 15 PHP
php正则表达式基本知识与应用详解【经典教程】
Apr 17 PHP
PHPstorm激活码2020年5月13日亲测有效
Sep 17 PHP
WordPress伪静态规则设置代码实例
Dec 10 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
php快递单号查询接口使用示例
2014/05/05 PHP
使用PHP访问RabbitMQ消息队列的方法示例
2018/06/06 PHP
Nigma vs Alliance BO5 第五场2.14
2021/03/10 DOTA
$.getJSON在IE下失效的原因分析及解决方法
2013/06/16 Javascript
JavaScript的Module模式编程深入分析
2013/08/13 Javascript
浏览器页面区域大小的js获取方法
2013/09/21 Javascript
js自动生成对象的属性示例代码
2013/10/28 Javascript
Jquery中ajax方法data参数的用法小结
2014/02/12 Javascript
javascript批量修改文件编码格式的方法
2015/01/27 Javascript
JavaScript每天必学之基础知识
2016/09/17 Javascript
JS常用函数和常用技巧小结
2016/10/15 Javascript
JS实现颜色梯度与渐变效果完整实例
2016/12/30 Javascript
尝试自己动手用react来写一个分页组件(小结)
2018/02/09 Javascript
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
2018/07/13 Javascript
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
jQuery实现电梯导航模块
2020/12/22 jQuery
[01:31:22]Ti4 循环赛第四日附加赛LGD vs Mouz
2014/07/13 DOTA
python生成随机验证码(中文验证码)示例
2014/04/03 Python
Python Socket编程详细介绍
2017/03/23 Python
python+pyqt5实现图片批量缩放工具
2019/03/18 Python
python各类经纬度转换的实例代码
2019/08/08 Python
python2.7的flask框架之引用js&css等静态文件的实现方法
2019/08/22 Python
django连接mysql数据库及建表操作实例详解
2019/12/10 Python
如何基于python实现归一化处理
2020/01/20 Python
django 数据库返回queryset实现封装为字典
2020/05/19 Python
Django实现简单的分页功能
2021/02/22 Python
h5使用canvas画布实现手势解锁
2019/01/04 HTML / CSS
G-Form护具官方网站:美国运动保护装备
2019/09/04 全球购物
毕业生教师求职信
2013/10/20 职场文书
工厂实习感言
2014/01/14 职场文书
《狼》教学反思
2014/03/02 职场文书
机关单位人员学雷锋心得体会
2014/03/10 职场文书
三好学生先进事迹材料
2014/08/28 职场文书
干部作风建设年活动剖析材料
2014/10/23 职场文书
2015年支教教师工作总结
2015/07/22 职场文书
2016年度创先争优活动总结
2016/04/05 职场文书