mongo 使用Command解决不同条件批量处理问题

来源:互联网 发布:npm 修改为淘宝镜像 编辑:程序博客网 时间:2024/06/05 21:56

参考链接   https://docs.mongodb.com/manual/reference/command/nav-crud/


文中有一系列的可以批量处理的操作  下面show下 update 


需求是这样:

定时执行的脚本,不同条件的执行一批数据  使用foreach 单挑更新的话 出错的几率更加的大

所提议选择了批量的更新 ,但是MongoCollecion 没有可以执行不同条件更新的函数  

所以用到了原生的MongoDB\Driver\Manager::executeCommand 


关于update 命令的部分

语法:

update  collection name

        updates   是二维的索引数组 内部有完整的数据结构 

单个的数组的结构是 

q  array 正常的条件

       u    是要更新的内容(这个等同于update()函数的更新的内容)

                        upsert  没有找到则插入,找到了则更新

multi  true 符合条件的则全部更新  默认false  只更新第一条

return value:

如果执行遇到了错误   会出现字段 WriteErrors  是一个数组 ,

没有出错的话那么 字段不存在

 


上代码:

// gen cmd string$query = [    'end_time' => [        '$gte' => 1505285294    ]];$query2 = [    'end_time' => [        '$gte' => 1504972800,        '$lt' => 1505285294    ]];$cmd = [    'update' => 'sid_collection',    'updates' => [ //二维的索引数组        [            'q' => $query,            'u' => ['$set' => ['tel' => '110-000']],            'upsert' => true,            'multi' => true        ],        [            'q' => $query2,            'u' => ['$set' => ['tel' => '112-222']],            'upsert' => true,            'multi' => true        ]    ],];$command = new \MongoDB\Driver\Command($cmd);// gen mongo instance$mongo_manager = new \MongoDB\Driver\Manager('mongodb://ip:27017');try {    $data = $mongo_manager->executeCommand('crs', $command);} catch (MongoDB\Driver\Exception\RuntimeException $e) {    echo $e->getMessage(), "\n";    exit;}var_dump($data);