zoukankan      html  css  js  c++  java
  • php mongodb manager 查数据的各种姿势

    一、连接 mongodb 数据库

    以下操作默认都是以上面操作为前提(已连接成功)而做的操作

    二、查的各种姿势

    1)通过主键_id来查询,注意:_id不是直接用字符串来表示,要用 new MongoDBBSONObjectId 对象

    // mysql: SELECT * FROM appDownloadRecord WHERE _id='5a2b9aaf96b4a97efbe31a91';
    $id      = new MongoDBBSONObjectId("5a2b9aaf96b4a97efbe31a91");
    $filter  = ['_id' => $id];
    $options = [];
    $query   = new MongoDBDriverQuery($filter, $options);
    $rows    = $mongo->executeQuery('promotion-prod.appDownloadRecord', $query)->toArray();
    echo '<pre>';print_r($rows);echo '</pre>';exit;

    2)查询指定字段(其中_id默认是返回的,如果不想返回,要设置 _id=>0)

    // mysql: SELECT `source`,`ip` FROM appDownloadRecord WHERE _id='5a2b9aaf96b4a97efbe31a91';
    $id      = new MongoDBBSONObjectId("5a2b9aaf96b4a97efbe31a91");
    $filter  = ['_id' => $id];
    $options = [
        'projection' => ['_id'=>0, 'source'=>1, 'ip'=>1]
    ];
    $query   = new MongoDBDriverQuery($filter, $options);
    $rows    = $mongo->executeQuery('promotion-prod.appDownloadRecord', $query)->toArray();
    echo '<pre>';print_r($rows);echo '</pre>';exit;

    3)普通条件查询

    // mysql: SELECT * FROM appDownloadRecord WHERE source='bdsem1' LIMIT 10;
    $filter  = ['source' => 'bdsem1'];
    $options = ['limit'=>10];
    $query   = new MongoDBDriverQuery($filter, $options);
    $rows    = $mongo->executeQuery('promotion-prod.appDownloadRecord', $query)->toArray();
    echo '<pre>';print_r($rows);echo '</pre>';exit;

    4)范围查询(between)

    // mysql: SELECT * FROM appDownloadRecord WHERE (source='bdsem1') AND (createTime BEWTEEN '2017-12-21 00:00:00' AND '2017-12-28 00:00:00') LIMIT 10;
    // mysql: SELECT * FROM appDownloadRecord WHERE (source='bdsem1') AND (createTime>='2017-12-21 00:00:00' AND createTime<'2017-12-28 00:00:00') LIMIT 10;
    $startTime = new MongoDBBSONUTCDateTime(strtotime('2017-12-21 00:00:00')*1000);
    $endTime   = new MongoDBBSONUTCDateTime(strtotime('2017-12-28 00:00:00')*1000);
    $filter  = [
        'source' => 'bdsem1',
        'createTime' => [
            '$gte' => $startTime,
            '$lt'  => $endTime,
        ],
    ];
    $options = ['limit'=>10];
    $query   = new MongoDBDriverQuery($filter, $options);
    $rows    = $mongo->executeQuery('promotion-prod.appDownloadRecord', $query)->toArray();
    echo '<pre>';print_r($rows);echo '</pre>';exit;

    5)in 查询

    // mysql: SELECT * FROM appDownloadRecord WHERE (source IN ('bdsem1', 'besem2', 'besem3')) LIMIT 10;
    $filter  = [
        'source' => [
            '$in' => ['bdsem1', 'bdsem2', 'bdsem3']
        ],
    ];
    $options = ['limit'=>10];
    $query   = new MongoDBDriverQuery($filter, $options);
    $rows    = $mongo->executeQuery('promotion-prod.appDownloadRecord', $query)->toArray();
    echo '<pre>';print_r($rows);echo '</pre>';exit;

    6)or 操作

    // mysql: SELECT * FROM appDownloadRecord WHERE source='bdsem1' AND (sys='ios' OR sys='other') LIMIT 10;
    $filter  = [
        'source' => 'bdsem1',
        '$or' => [
            ['sys'=>'ios'],
            ['sys'=>'other']
        ]
    ];
    $options = ['limit'=>10];
    $query   = new MongoDBDriverQuery($filter, $options);
    $rows    = $mongo->executeQuery('promotion-prod.appDownloadRecord', $query)->toArray();
    echo '<pre>';print_r($rows);echo '</pre>';exit;

    7)group (聚合)操作

    // mysql: SELECT sys,sum(*) as total FROM appDownloadRecord WHERE source='bdsem1' GROUP BY sys;
    $document = [
        'aggregate' => 'appDownloadRecord',
        'pipeline' => [
            [
                '$match' => [
                    'source' => 'bdsem1'
                ]
            ],
            [
                '$group' => [
                    '_id' => '$sys',
                    'total' => ['$sum'=>1]
                ]
            ]
        ],
        'allowDiskUse' => false,
    ];
    $command = new MongoDBDriverCommand($document);
    $rows    = $mongo->executeCommand('promotion-prod', $command)->toArray();
    echo '<pre>';print_r($rows);echo '</pre>';exit;

    8)group having

    // mysql: SELECT sys,sum(*) as total FROM appDownloadRecord WHERE source='bdsem1' GROUP BY sys HAVING total>1000;
    $document = [
        'aggregate' => 'appDownloadRecord',
        'pipeline' => [
            [
                '$match' => [
                    'source' => 'bdsem1'
                ]
            ],
            [
                '$group' => [
                    '_id'   => '$sys',
                    'total' => ['$sum'=>1]
                ]
            ],
            [
                '$match' => [
                    'total' => ['$gt'=>1000]
                ]
            ]
        ],
        'allowDiskUse' => false,
    ];
    $command = new MongoDBDriverCommand($document);
    $rows    = $mongo->executeCommand('promotion-prod', $command)->toArray();
    echo '<pre>';print_r($rows);echo '</pre>';exit;

    9)排序 sort

    // mysql: SELECT * FROM appDownloadRecord WHERE source='bdsem1' ORDER BY createTime desc LIMIT 10;
    $filter  = ['source' => 'bdsem1'];
    $options = [
        'sort'       => ['createTime'=>-1],
        'limit'      => 10
    ];
    $query   = new MongoDBDriverQuery($filter, $options);
    $rows    = $mongo->executeQuery('promotion-prod.appDownloadRecord', $query)->toArray();
    echo '<pre>';print_r($rows);echo '</pre>';exit;

    10)limit 分页

    // mysql: SELECT * FROM appDownloadRecord WHERE source='bdsem1' LIMIT 10;
    $filter  = ['source' => 'bdsem1'];
    $options = [
        'limit' => 10
    ];
    $query   = new MongoDBDriverQuery($filter, $options);
    $rows    = $mongo->executeQuery('promotion-prod.appDownloadRecord', $query)->toArray();
    echo '<pre>';print_r($rows);echo '</pre>';exit;
    // mysql: SELECT * FROM appDownloadRecord WHERE source='bdsem1' LIMIT 10,10;
    $filter  = ['source' => 'bdsem1'];
    $options = [
        'skip'  => 10,
        'limit' => 10
    ];
    $query   = new MongoDBDriverQuery($filter, $options);
    $rows    = $mongo->executeQuery('promotion-prod.appDownloadRecord', $query)->toArray();
    echo '<pre>';print_r($rows);echo '</pre>';exit;

    完。

  • 相关阅读:
    [bzoj1072][SCOI2007][排列perm] (状态压缩+数位dp+排列去重)
    [bzoj2461][BeiJing2011][符环] (括号配对+记忆化搜索+高维dp)
    [bzoj4027][HEOI2015][兔子与樱花] (树形dp思想+玄学贪心)
    [bzoj1925][Sdoi2010][地精部落] (序列动态规划)
    [bzoj1004][HNOI2008][Cards] (置换群+Burnside引理+动态规划)
    [bzoj1003][ZJOI2006][物流运输] (最短路+dp)
    [spoj104][Highways] (生成树计数+矩阵树定理+高斯消元)
    [bzoj1002][FJOI2007 轮状病毒] (生成树计数+递推+高精度)
    [bzoj 1001][Beijing2006]狼抓兔子 (最小割+对偶图+最短路)
    [模拟赛FJOI Easy Round #2][T3 skill] (最小割+最大权闭合子图(文理分科模型))
  • 原文地址:https://www.cnblogs.com/tujia/p/8134002.html
Copyright © 2011-2022 走看看