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

参考链接   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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值