//是否只查mx
$mx_on_switch = I("post.mx_on_switch");
//mx模糊查询
$mx_vague_check = I("post.mx_vague_check");
//邮箱品牌
$mail_brand = I("post.mail_brand");
//智能客服品牌
$contacttool_brand = I('post.contacttool_brand');
//域名注册人
$people = I("post.people");
//注册机构
$registrar = I("post.registrar");
//是否只查标题
$mx_switch_title = I("post.mx_switch_title");
//网站标题
$wwwtitle = I("post.wwwtitle");
$province = I("post.province"); $filter = [];
if (!empty($mail_brand)) {
$filter['mx.brand_id'] = intval($mail_brand);
}
if (!empty($contacttool_brand)) {
$filter['contacttool.brand_id'] = intval($contacttool_brand);
}
if ($mx_switch_title == 20 || empty($province)) {
$filter["wwwtitle"] = ['$ne' => 'null'];
}
//网站标题
if (!empty($wwwtitle)) {
$filter['wwwtitle'] = new \MongoDB\BSON\Regex(".*{$wwwtitle}.*", '');
}
//只带mx的查询
if ($mx_on_switch == 20 || empty($province)) {
$filter["mx"] = ['$exists' => true];
}
//mx模糊查询
if (!empty($mx_vague_check)) {
$filter["mx.mx"] = new \MongoDB\BSON\Regex(".*{$mx_vague_check}.*", '');
} //如果没有传递省份
if (empty($province)) {
$province = "shandong";
}
try {
$options_base = ['connectTimeoutMS' => 500000, 'socketTimeoutMS' => 500000];
$manager = new \MongoDB\Driver\Manager(C('mongodb_auth_url'), $options_base);
$coll = C('default_db') . '.' . $province;
$options = [
"skip" => $page,
"limit" => $rows,
'projection' => ['createdate' => 0,
'expiresdate' => 0,
'registrant_city' => 0,
'registrant_street' => 0,
'registrant_state' => 0,
'updatedate' => 0,
'whoisserver_id' => 0,
'registrar_name_id' => 0,
'id' => 0,
],
];
//查询记录总的数量
$commands = [
'count' => $province,
'query' => $filter
];
$command = new \MongoDB\Driver\Command($commands);
$cursor = $manager->executeCommand('mxmanage', $command);
$info = $cursor->toArray();
$count = $info[0]->n;
$query = new \MongoDB\Driver\Query($filter, $options);
$rows = $manager->executeQuery($coll, $query);
$info = [];
foreach ($rows as $document) {
$doc = (array)$document;
$doc['_id'] = (string)$doc['_id'];
$doc['mail_brand_name'] = $doc['mx']->brand_name;
$doc['mail_mx'] = $doc['mx']->mx ?: '';
$doc['contacttool_brand_name'] = $doc['contacttool']->brand_name;
$doc['mx_changetime'] = !$doc['mx_changetime'] ? '' : date('Y-m-d H:i', $doc['mx_changetime']);
$doc['contacttool_changetime'] = !$doc['contacttool_changetime'] ? '' : date('Y-m-d H:i', $doc['contacttool_changetime']);
unset($doc['mx']);
unset($doc['contacttool']);
$info[] = $doc;
}
} catch (\MongoDB\Driver\Exception $e) {
echo $e->getMessage(), "\n";
exit;
}
return json_encode(array("total" => $count, "rows" => $info));

查询实例  参考http://php.net/manual/en/book.mongodb.php

php MongoDB driver 查询实例的更多相关文章

  1. C# mongoDB Driver 使用对象方式查询语法大全

    #region 查询方法 /// <summary> /// 获取单个对象 /// </summary> /// <typeparam name="T" ...

  2. MongoDB Driver 简单的CURD

    c#中我们可以使用MongoDB.Driver驱动进行对MongoDB数据库的增删改查. 首先需要在NuGet中安装驱动 安装完毕后会发现会有三个引用 其中 MongoDB.Driver和MongoD ...

  3. c# MongoDB Driver 官方教程翻译

    先贴官方文档地址:http://mongodb.github.io/mongo-csharp-driver/2.5/getting_started/quick_tour/ 安装部分很简单,nuget搜 ...

  4. MongoDB入门及 c# .netcore客户端MongoDB.Driver使用

    MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系 ...

  5. MongoDB 模糊查询,及性能测试

    var mongodb = new MongoClient("mongodb://127.0.0.1:27017");//MongoServer.Create();//创建链接 v ...

  6. mongoDB高级查询$type4array使用解析

    今天在使用mongoDB高级查询$type:符号 -- 4代指Array类型发现一个问题. $type符号: $type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果. 下面是mong ...

  7. 基于MongoDB.Driver的扩展

    由于MongoDB.Driver中的Find方法也支持表达式写法,结合[通用查询设计思想]这篇文章中的查询思想,个人基于MongoDB扩展了一些常用的方法. 首先我们从常用的查询开始,由于MongoD ...

  8. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二)(代码篇)

    这篇是上一篇的延续: 用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 源代码在github上可以下载,地址:https://github.com/guoxia ...

  9. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一)

    梳理下使用spring+springMVC+mybatis 整合后的一个简单实例:输入用户的 ID,之后显示用户的信息(此次由于篇幅问题,会分几次进行说明,此次是工程的创建,逆向生成文件以及这个简单查 ...

随机推荐

  1. [原创]Network Emulator for Windows Toolkit使用介绍

    [原创]Network Emulator for Windows Toolkit使用介绍 1 Network Emulator for Windows Toolkit简介 微软在window系统下,可 ...

  2. webbench进行压力测试

    参考原文:http://www.vpser.net/opt/webserver-test.html webbench是Linux下的一个网站压力测试工具,最多可以模拟3万个并发连接去测试网站的负载能力 ...

  3. IntelliJ IDEA2018.1、2017.3破解教程

    (1)下载破解补丁 把下载的破解补丁放在你的idea的安装目录下的bin的目录下面(如下图所示),本文示例为G:\idea\IntelliJ IDEA 2017.3.4 破解补丁下载:http://i ...

  4. Java LinkedList工作原理及实现

    1. 概述 以双向链表实现.链表无容量限制,但双向链表本身使用了更多空间,也需要额外的链表指针操作. 按下标访问元素—get(i)/set(i,e) 要悲剧的遍历链表将指针移动到位(如果i>数组 ...

  5. InfluxDB源码目录结构解析

    操作系统 : CentOS7.3.1611_x64 go语言版本:1.8.3 linux/amd64 InfluxDB版本:1.1.0 influxdata主目录结构 [root@localhost ...

  6. ubuntu 12.04启用休眠

    x86-64 与EM64区别 EM64T全称是Extended Memory 64 Technology(64位内存技术扩展技术.Intel声称“EM64T技术是Intel对IA32平台一系列技术革新 ...

  7. 关于input时间框设置了弹出选择就不能手动输入的控制

    <input class="Wdate" onclick="WdatePicker({minDate:'#F{$dp.$D(\'startDate\');}',ma ...

  8. Ubuntu菜鸟入门(十七)—— E: Sub-process /usr/bin/dpkg returned an error code (1) 出错解决方案

    cd /var/lib/dpkg sudo mv info info.bak sudo mkdir infosudo apt-get install shotwel

  9. 适配器模式在Android中的应用

    工资翻倍篇之适配器模式 先了解一下适配器的基本概念,然后再详细分析一些适配器的样例,最后通过Android开发中经常使用的适配器模式进行分析,保证对适配器模式理解透彻. 适配器模式可分为三类:类的适配 ...

  10. Effective Java 第三版——53. 明智而审慎地使用可变参数

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...