/** * PHP 操作 MongoDB 勉強記
* 2011 年 2 月 23 日
* 原著者: xiaocai
*/
//****************** ************
//* * MongoDB データベースサーバーに接続します//************************* *****
//Format=>("mongodb://ユーザー名: パスワード@アドレス: ポート/デフォルトで指定されたデータベース", パラメーター)$conn = new Mongo();
// と省略できます。
//$conn=new Mongo(); $conn=new Mongo("172.21.15.69"); conn=new Mongo( "xiaocai.loc",array("replicaSet"=>true)); #負荷分散
//$conn=new Mongo("xiaocai.loc",array("persist"=>"t")); #永続的な接続
//$conn=new Mongo("mongodb://sa:123@ localhost"); 27018"); #複数のサーバーに接続します
//$conn=new Mongo("mongodb:///tmp/mongo-27017.sock"); ://admin_miss:miss@localhost:27017/test" ,array('persist'=>'p',"replicaSet"=>true)); #Complete
//****** ************* ********
//** データベースとテーブルを選択します
//********************** ******
$db=$conn->mydb; ion= $db->column; #コレクションを選択 (「テーブル」を選択) / /$collection=$db->selectCollection('column'); #2 番目の方法書き込み
//$collection=$conn-> mydb->column; #さらに簡潔な書き込み
//注:
// 1. データベースとコレクションが存在しない場合は、事前に作成する必要はありません。 、自動的に作成されます
// 2. タイプミスに注意してください。新しいデータベースが意図せずに作成される可能性があります (元のデータベースと混同されます)。
//********* **********************
//** ドキュメントを挿入
//******************* ***********
//**データをコレクションに挿入し、挿入が成功したかどうかを判断するために bool を返します。*/
$array=array('column_name'=>'col'.rand(100,999),'column_exp'=>'xiaocai');
$result=$collection-> ;insert($array); #単純な挿入
echo "新しいレコード ID:".$array['_id']; #MongoDB はレコード識別子を返します
var_dump($result); #Return: bool(true)挿入結果: { "_id" : ObjectId("4d63552ad549a02c01000009"), "column_name" : "col770", "column_exp" : "xiaocai" }
#'_id' は主キー フィールドで、挿入中に MongoDB によって自動的に追加されます。 .
/ /**データをコレクションに安全に挿入し、挿入ステータス (配列) を返します。*/$array=array('column_name'=>'col'.rand(100,999),'column_exp'=>'xiaocai2');
$result=$collection ->insert ($array,true); #MongoDB が操作を完了して成功したかどうかを判断するために使用されます (このパラメーターは、大量のレコードが挿入される場合にさらに便利です)
echo "新しいレコード ID :".$array['_id'] ; #MongoDB はレコード識別子を返します
var_dump($result); > float(1) }
//**insert の完全な構文 **/
# insert(array $data ,array('safe'=>false,'fsync'=>false,'timeout'=> 10000))
# パラメータの説明:safe: デフォルト false、安全に書き込むかどうか、fsync: デフォルト false、書き込みするかどうか。ディスクへの強制挿入; タイムアウト: タイムアウト (ミリ秒)
//**次の 2 つの挿入は、値が同じであるため、同じレコード (同じ _id) です**/ $collection->insert(array('column_name'=>'xiaocai'));
$collection-> insert(array('column_name'=>'xiaocai'));
#Avoid メソッド、安全な挿入
$collection->insert(array('column_name'=>'xiaocai'),true);
try {
$collection->insert(array('column_name'=>'xiaocai'),true) ;
}catch(MongoCursorException $e){
echo "同じ人を 2 回保存することはできません!n";
}
//詳細: http://www.php.net/manual/zh/mongocollection.insert .php
//**************************
//** ドキュメントの更新 ***** ***
//** 修正および更新 **/
$where=array('column_name'=> 'col123');$newdata=array('column_exp'=>'GGGGGG',' column_fid'=>444);
$result=$collection->update($where,array('$set' =>$newdata)) #$set: 指定された値と等しいノードを作成します
/*
* 元のデータ
* {"_id":ObjectId("4d635ba2d549a02801000003"),"column_name":"col123"," column_exp":"xiaocai"}
*
に置き換えられます * {"_id":ObjectId(" 4d635ba2d549a02801000003"),"column_name":"col123","column_exp":"GGGGGGG","column_fid":444}
*/
//**代替アップデート **/
$where=array('column_name'= >'col709');$newdata=array('column_exp'=>'HHHHHHHHH','column_fid'=> 123);
$result=$collection->update($where,$newdata);
/*
* 元のデータ
* {"_id":ObjectId("4d635ba2d549a02801000003"),"column_name":"col709", "column_exp":"xiaocai"}
*
に置き換えられます * {"_id": ObjectId("4d635ba2d549a02801000003"),"column_exp":"HHHHHHHHH","column_fid":123}
*/
//**一括更新 **/
$where=array('column_name'=>'col' );$newdata=array('column_exp'=>'multiple','91u'=>684435);
$result= $collection->update($where,array('$set'=> $newdata),array('multiple'=>true));
/**
* すべての「column_name」=「col」が変更されます
*/
//** 自動蓄積※*/
$where=array('91u'=>684435) ;$newdata=array('column_exp'=>'edit');
$result=$collection->update($where ,array('$set'=>$newdata,'$inc'=> ;array('91u'=>-5)));
/**
* 91u=684435のデータを更新し、91uを5減算します
* 注: 91uが存在する場合は-5を追加し、存在しない場合は91u=-5を設定します
*/
//**一致する場合は更新し、一致しない場合は * を追加します*/
$c->update(
array("name" => "joe"),
array("username" => "joe312", "createdAt" => ; new MongoDate())、
array("upsert" => true) #up(date)(in)sert
);
/**ノードの削除 **/
$where=array('column_name'= >'col685');
$result=$collection->update($where,array('$unset'=>'column_exp'));
/**
* ノードcolumn_expを削除します
*/
/** 新しいデータをノードに追加 **/
$coll->update(
array('b'=>1),
array('$push'=>array('a'=>'wow')) #Additionalノード a
);
# 対応するノードが配列の場合は、新しい値を追加します。ノードが存在しない場合は、配列を作成して値を配列に追加します。配列、戻り値が間違っています。
# 元のレコード: array('a'=>array(0=>'haha'),'b'=>1)
# 新しいレコード: array('a'=>array(0= >'haha',1=>'wow'),'b'=>1)
# $pushAll は $push に似ていますが、複数の値が一度にノードに追加される点が異なります
/**判決の更新 * */$coll->update(
array('b'=>1),
array('$addToSet'=>array('a'=>'wow') )
);
# この段階で配列に特定の値がない場合は追加します
# レコード構造をarray('a'=>array(0=>'haha'),'b'とする=>1)
# の場合、ノード a にすでに wow があるため、新しい項目は追加されません
# そうでない場合、新しい項目 - wow がノードに追加されます。
/**配列ノードの最後の要素を削除します **/$coll->update(
array('b'=>1),
array('$pop'=>array('a'=>1) ) #配列ノードの最後の要素を削除します
);
/**配列ノードの最初の要素を削除します **/ $coll->update(
array('b'=>1),
array('$pop' =>array('a'=>-1)) #配列ノードの最初の要素を削除します
);
/**配列ノードの要素を削除 **/$coll->update(
array(' b'=>1),
array('$pull'=>array('a'=>'haha'))
)
# ノードが配列の場合、値が value である子を削除します。配列でない場合は、エラーが返されます。
# 元のレコードは次のとおりです: array('a'=>array(0=>'haha',1=>'wow'),'b'=>1),
# a の値を削除します笑 サブ項目
# 結果は次のようになります: array('a'=>array(0=>'wow'),'b'=>1)
# $pullAll は $pull と似ていますが、次の点が異なります。条件に合致したレコードを削除できること。
# 注: # 1. 置換更新と修正更新の区別に注意してください
# 2. array('91u'=>'684435') と array('91u' などのデータ型の区別に注意してください) =>684435)
//***************************
//** 文書を削除
//*************** ******* ********
/** 削除 **/$collection->remove(array('column_name'=>'col399'));
//$collection->remove(); collection->drop(); #Clear、remove() より効率的
/**指定されたMongoIdを削除します **/$id = new MongoId("4d638ea1d549a02801000011");
$collection->remove(array( '_id'=>(object)$id));
/*
* *
* {"_id":ObjectId("4d638ea1d549a02801000011")} と一致するには、次のメソッドを使用します。クエリと更新でも同様です
* $ id = new MongoId("4d638ea1d549a02801000011");
* array('_id'=>(object)$id)
* *
*/
//*********** * *************//** ドキュメントのクエリ
//************************** ****
/**ドキュメント内のレコード数を問い合わせる **/
echo 'count:'.$collection->count()."
"; 'type'=>'user'))."
" ; #条件を追加できます
echo 'count:'.$collection->count(array('age'=>array('$ gt'=>50,'$lte'=>) ;74))) ."
"; #50 より大きく、74 以下
echo 'count:'.$collection->find()->limit (5)-& gt; & gt; count (true)。&*/
$cursor = $collection->find()->snapshot();
foreach ($cursor as $id => $value) { echo "$id : "; var_dump($value) ; echo "
"; ; */
/**
* 注: $gt はより大きいことを意味します、$gte は以上を意味します、$lt はより小さいことを意味します、$lte は以下を意味します、$ne は等しくないことを意味します、$exists は存在しません*/
$cursor = $collection->find()->fields(array("年齢"=>false,"タイプ"=>false));
/**コレクション内のすべての文書 **/
$cursor = $collection->find()->fields(array("user"= >true));
/**
* 注:
* find() 操作を実行して $cursor カーソルを取得した後も、カーソルは動的のままです
* * つまり、find() の後、カーソル ループが完了するまでの時間です。より多くの修飾されたレコードがコレクションに挿入されると、これらのレコードも $cursor によって取得されます
* $cursor を取得した後に結果セットを変更しないようにしたい場合は、これを行う必要があります:
* $cursor = $collection- >find();
* $cursor->snapshot();#スナップショットを取得します!
※詳しくはhttp://www.bumao.com/index.php/2010/08/mongo_php_cursor.htmlをご覧ください
*/
/ **データの一部をクエリする **/
$where=array('type'=>array('$exists'=>true),' age'=>array('$ne'=>0,'$ lt'=>50,'$exists'=>true));
$cursor = $collection->find($where) ;
/**
* 注: findOne() が結果セットを取得した後は、Snapshot()、fields()、およびその他の関数を使用できません。*/$cursor = $collection->find()->limit(5)->skip(0);
/**年齢、タイプ欄は表示されません ※*/$カーソル = $collection->find()->sort(array(' age'=>-1,'type'=>1)); (array('age' => 1,'type'=>) ;-1)); '=>-1),array('background'=>true)); #インデックスの作成はバックグラウンドで実行されます (デフォルトは同期的に実行されます)
$collection->ensureIndex( array('age' => 1,'type'=>-1),array('unique'=>true)); #このインデックスは一意です
/**ユーザー列のみを表示 **/
$cursor = $collection->find ();
$array=array();foreach ($cursor as $id => $value) {
$array[]=$value;
}
http://www.bkjia.com/PHPjc/444634.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/444634.html技術記事 PHPの操作MongoDBの設定や学習メモが必要な友人は参考にしてください。 Mongo は主に、大規模なデータのアクセス効率の問題を解決します。公式ドキュメントによると、データ量が 50GB を超えると...
。