Yii2 Mongodb ActiveRecord 添加索引

public static function create_index(){
  $indexs = [
    ['cid' => -1],
    ['market_person' => -1],
    ['created_at_date' => -1,'market_person' => -1],
  ];
  
  $options = ['background' => true, 'socketTimeoutMS' => 300000];
  foreach($indexs as $columns){
    self::getCollection()->createIndex($columns,$options);
  }
}

$indexs里面的每一个数组就是一个索引,

$options 里面的background代表后台执行的意思,因为添加索引,如果不加这个选项,如果表很大,要执行几十分钟,那么库会被加锁。

Yii2 Mongodb 生成递增id的方法

 

代码如下:

public static function increament($tablename){
    
    $coll = Yii::$app->mongodb->getCollection("ids");
    $update = array('?inc'=>array('id'=>1));
    $query = array('name'=>$tablename);
    $command = array(
      'findandmodify'=>'ids', 'update'=>$update,
      'query'=>$query, 'new'=>true, 'upsert'=>true
      );
    
    $result = $coll->mongoCollection->db->command($command);
    $id = $result['value']['id'];
    
    $current_id = (int)$id->value;
    Global $current_id;
    return $current_id;
  }

使用的时候直接 $dd = CID::increament(‘xxx’);即可获取到递增的id,

在一些场景,插入压力不是很多,但是很需要递增id的场景可以使用mongodb的这种递增id的方式,上面的写法是在yii2中使用的写法,如果不在yii2中使用mongodb的递增字段,则可以使用下面的代码:

function increament($m,$database_name,$collection_name){
  
  $ids = "ids";
  $db_name = "tracedb";
  $db = $m->selectDB($db_name);
  //$col = $m->selectDB($db_name)->$ids;
  
  $query = array('name'=>$collection_name);
  $update = array('$inc'=>array('id'=>1));
  $result = $db->command(
            array(
            "findandmodify" => $ids,
            "query" => $query,
            "update" => $update,
            'new'=>true,
            'upsert'=>true
            )
          );

  return $result['value']['id'];
  
  

}