phpMongodb操作CURD和聚合分组求和
<?php
//初始化
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");
// 插入数据
$bulk = new MongoDB\Driver\BulkWrite;
$bulk->insert(['x' => 1, 'name'=>'菜鸟教程', 'url' => 'http://www.runoob.com']);
$bulk->insert(['x' => 2, 'name'=>'Google', 'url' => 'http://www.google.com']);
$bulk->insert(['x' => 3, 'name'=>'taobao', 'url' => 'http://www.taobao.com']);
$manager->executeBulkWrite('test.sites', $bulk);
/**
* $lt 小于
* $lte 小于等于
* $gt 大于
* $gte 大于等于
* $ne 不等于
* $in 包含
* $nin 不包含
* */
$filter = ['x' => ['$gt' => 0]]; //大于
$filter = ['x' => ['$lt' => 5]]; //小于
$filter = ['name' => 'Google']; //等于
$filter = ['name' => ['$regex' => '教程']]; //模糊查询
$filter = ['x' => ['$in' => [1,2]]]; //in用法
$options = [
'projection' => ['_id' => 0], //key为查询的字段 value 1:显示 0:隐藏
'sort' => ['x' => 1], //1升序 -1降序
'limit' => 0, //限制查询条数
];
// 查询数据
$query = new MongoDB\Driver\Query($filter, $options);//查询请求
$cursor = $manager->executeQuery('test.sites', $query);
foreach ($cursor as $document) {
$document = objectToArray($document);
print_r($document);
}
//更新
$bulk = new MongoDB\Driver\BulkWrite;
$bulk->update(
['x' => 2],
['$set' => ['name' => '菜鸟工具', 'url' => 'tool.runoob.com']],
['multi' => false, 'upsert' => false]
);
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);
$result = $manager->executeBulkWrite('test.sites', $bulk, $writeConcern);
var_dump($result);
//删除
$bulk = new MongoDB\Driver\BulkWrite;
$bulk->delete(['x' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据
$bulk->delete(['x' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000);
$result = $manager->executeBulkWrite('test.sites', $bulk, $writeConcern);
var_dump($result);
//聚合查询 $match:分组搜索条件 count:分组后求个数 sum:分组后求和
$param = [
'aggregate' => 'sites', //表名
'pipeline' => [
['$match' => ['x' => 2]],
['$group' => ['_id' => '$name', 'count' => ['$sum' => 1]]],
],
'cursor' => new \stdClass()// 高版本需要带上这个值
];
$command = new \MongoDB\Driver\Command($param);
$cursor = $manager->executeCommand('test', $command);
foreach ($cursor as $document) {
$document = objectToArray($document);
var_dump($document);
}
function objectToArray($object){
$result = array();
$object = is_object($object) ? get_object_vars($object) : $object;
foreach ($object as $key => $val) {
$val = (is_object($val) || is_array($val)) ? objectToArray($val) : $val;
$result[$key] = $val;
}
return $result;
}
网友评论