PHP 7 MongoDB拡張

3262 ワード

このすべての神馬関数名を見て、もう少し長くなりますか?swiftの関数名を追い越しますか?
MongoDB\Driver\Manager::executeBulkWrite
呼び出しに合わせて巨大なクラスライブラリも構成されています.これです.https://github.com/mongodb/mongo-php-libraryああ、純粋にズボンを脱いでPを置いて、この一挙に、もともと原生の拡張はすでに大きくて、とても使いにくくて、また1つのまったくコードを簡略化していないライブラリを配合して何の意味がありますか?このクラスライブラリを呼び出すのは、元の名前よりも長く、うるさいし、パッケージが1つ増えるとバグの機会が1回増えることもあります.
このライブラリファイルは全部で63個です.見てください.スクリプトを書いてmongodbにアクセスして、63個のファイルを含まなければなりません.私のTMプロジェクト全体に63個のファイルがありません.いいですか.これらのjavaを書き慣れたものは大丈夫です.正直にjavaを書いて、phpを書きに来ました.phpは解析的に実行しなければなりません.jvmのようにコンパイルして実行を最適化するわけではありません.そんなに多くのファイルを作って、実行速度に影響しませんか.本当に犬糞なので、この犬糞庫は全くお勧めしません.
しかし、この拡張が最も奇妙なのは、ドキュメントが非常に粗末で、価値のある情報を得ることができないので、手がかりに頼るしかありません.
以下に、MongoClientからMongoDBDriverへの移行の相違点を示します.
MongoClientの挿入または更新は同じコードです.
(new MongoClient())->{$db}->{$collection}->save($arr);
//   $arr         "_id"       mongodb   _id ,       ,   php !

MongoDBDriver、挿入と更新は区別する必要があります:
$mongo = new MongoDB\Driver\Manager();
$bulk = new MongoDB\Driver\BulkWrite(['ordered' => true]);
$data = $mongo->executeQuery('db.collection', new MongoDB\Driver\Query([]), new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY_PREFERRED))->toArray();
if (empty($data[0])) { //      ,  
    $bulk->insert($arr);
} else { //     
    $bulk->update([], array('$set' => $arr)); // $arr        
}
//    ,       :db.collection          、   
$result = $mongo->executeBulkWrite('db.collection', $bulk, new MongoDB\Driver\WriteConcern(MongoDB\Driver\WriteConcern::MAJORITY, 1000));
//            :
$ok = $result->getInsertedCount() || $result->getModifiedCount() ? 1 : 0;
//     !

レコードを問い合わせる:
MongoClient:
(new MongoClient())->{$db}->{$collection}->findOne(['_id' => $id]);

MongoDB\Driver:
$mongo = new MongoDB\Driver\Manager();
$result = $mongo->executeQuery('db.collection', new MongoDB\Driver\Query(['_id'=>$id], []), new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY_PREFERRED));
//    $result     ,         。

クエリの数は、次の点に注意してください.
$mongo = new MongoDB\Driver\Manager();
$cursor = $mongo-executeCommand($db, new MongoDB\Driver\Command($arr), new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_SECONDARY_PREFERRED));
//   $cursor     。    $arr    :
$arr = ['count'=>$collection, 'query'=>$query]; //   count      ,         。

クエリ結果セット:
$mongo = new MongoDB\Driver\Manager();
$cursor = $mongo->executeQuery('db.collection', new MongoDB\Driver\Query($arr, $opts), new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY_PREFERRED));
//  ,    $arr  $opts;
$arr = ['_id'=> ['$in'=> $ids] ]; //   id      
$opts = ['limit'=> $limit, 'skip'=> $skip ]; //    
//      $limit $skip   ,       ,     :
$opts = ['limit'=> (int) $limit, 'skip'=> (int) $skip ]; //     。
//     ,         php ,            。        !

基本的には、その巨大なライブラリを使うのではなく、簡単なMongoDBDriverをパッケージすることをお勧めします.直接原生を使うこともお勧めしません.