MongoDB小例


原文の住所:http://lanmh.iteye.com/blog/765844
    import java.net.UnknownHostException;   
    import java.util.Set;   
      
    import com.mongodb.BasicDBObject;   
    import com.mongodb.DB;   
    import com.mongodb.DBCollection;   
    import com.mongodb.DBCursor;   
    import com.mongodb.DBObject;   
    import com.mongodb.Mongo;   
    import com.mongodb.MongoException;   
      
    public class Test {   
      
        /**  
         * @author gaogao  
         * @param args  
         * @throws MongoException  
         * @throws UnknownHostException  
         */  
        public static void main(String[] args) throws UnknownHostException,   
                MongoException {   
            // TODO Auto-generated method stub   
            //           
            Mongo m = new Mongo();   
            //     new_test_db       
            DB db = m.getDB("new_test_db");   
            //   new_test_db    (             )   
            Set<String> cols = db.getCollectionNames();   
            //    new_test_db    ,     null   
            for (String s : cols) {   
                System.out.println(s);   
            }   
            //       "new_test_col"      
            DBCollection collection = db.getCollection("new_test_col");   
            //        DB  ,            DB     
            BasicDBObject obj = new BasicDBObject();   
            //           
            obj.put("from", "  ");   
            obj.put("to", "  ");   
            obj.put("subject", "     ");   
            //       
            collection.insert(obj);   
            //      ,findOne()=find().limit(1);   
            DBObject dbobj=collection.findOne();   
            //             
            System.out.println(dbobj);   
            //       9 {ranking:i}      
            for(int i=0;i<9;i++){   
                collection.insert(new BasicDBObject().append("ranking", i));   
            }   
            //          ,      10   
            System.out.println(collection.getCount());   
            //         ,find()          (cursor),                 
            DBCursor cursor=collection.find();   
            //                  
            while(cursor.hasNext()){   
                System.out.println(cursor.next());   
            }   
            //                ,   ,       ,  ranking 1      
            BasicDBObject query=new BasicDBObject();   
            query.put("ranking", 1);   
            cursor=collection.find(query);   
            while(cursor.hasNext()){   
                System.out.println(cursor.next());   
            }   
            //           ,  ranking  5  9      
            query=new BasicDBObject();   
            query.put("ranking", new BasicDBObject("$gt", 5).append("$lt", 9));   
            cursor=collection.find(query);   
            while(cursor.hasNext()){   
                System.out.println(cursor.next());   
            }   
            //               
            m.dropDatabase("new_test_db");   
        }   
    }  
mongodbに対してjavaプログラミングを行います。  自動回転
http://www.kafka0102.com/2010/07/209.html
今週は実験的にモンゴdbを使っていますが、応用シーンは簡単ですので、今はモンゴdbについての知識もあまり深くないです。この文章は主にmongodbのjavaクライアントのプログラミングを紹介します。この方面の内容も簡単です。ここではまとめをします。mongodbのようなkvとsqlの間のストレージは、多くのインターネットアプリケーションに適していると言わざるを得ません。現在の応用例はすでに多く、コミュニティの活性度も高い(国内でも多くの人が研究を深めています。時間と精力があれば、私もモンゴdbに関する研究に力を入れるかもしれません)ので、楽しみにしています。
話を元に、Javaを使ったmongodbアプリケーションのいくつかの点滴をまとめます。Javaでmongodbと対話する一番直接的な選択はMongoDB Java Driverを使うことです。そのダウンロード先は以下の通りです。http://github.com/mongodb/mongo-java-driver/downloads。全体としては、Javaでmongodbを操作するAPIはやはり簡潔であり、それらのいくつかの一般的な使用について紹介する。
1、データベースに接続する
mongodbとの接続を確立するための例示的なコードは以下の通りである。
Mongo m=new Mongo(「local host」、27017)
DB db=m.getDB(“db_”test");
ここでは、mongodbを示すdb_を獲得しましたが。testデータベース接続の対象dbは、実際にmongodbと接続されていないので、データベースが起きなくても異常はありません。catchが必要です。mongodbのjava driverは接続に対して池化処理をしていますので、アプリケーションではMongoオブジェクトを実用化するだけでいいです。その操作はスレッドの安全です。これは開発にとって本当に便利です。
2、DB Collectionを取得する
mongodbの中のcollectionはJavaでDB Collectionを使用して表しています。DB Collectionのインスタンスを作成するのも1行のコードです。DBのインスタンスを作成するのと同じです。この操作は本当のデータベースとの通信には関わりません。
DBCollection coll=db.get Collection(「collection 1」);
mysqlのような「show tables」機能を得るには、次のコードが使えます。
Setcolls=db.get Collection Names()
for(String s:colls){
    System.out.println(s);
)
3、ドキュメントの挿入
mongodbはJSON形式の文書を保存していますが、Javaではこのようなデータ形式を示す最も簡単な種類がMapです。MongoDB Java Driverが提供するBaicDBObjectはMapであり、MapのデータをBSON形式に変換してmongodbに転送します。以下はドキュメントを挿入する例です。
DBCollection coll=db.get Collection(「collection 1」);
BaicDBObject doc=new Baic DBObject()
doc.put(「name」「kafka 0102」)
doc.put(「age」、28)
doc.put(「time」,new Date();
coll.insert(doc)
mongodbでは、挿入されたドキュメントごとに一意の識別(u)が生成されます。idcoll.insert(doc)を呼び出したとき。があるかどうかはドライブがチェックします。idフィールドは、ない場合は自動的にObjectIdインスタンスを生成し、_として使用する。IDの値は、このObjectIdは4つの部分から符号化されています。現在の時間、マシンの識別、プロセス番号と自己増加の整数です。
insert関数は、ドキュメントリストの挿入もサポートされています。
insert(List<DBObject>list)
提出操作にはudate(DBObject q,DBObject o)、remove(DBObject o)があります。
4、照会文書
4.1、findOne
findOneはクエリーが条件を満たす第一条の記録(データベースが条件を満たすのは一つの記録だけという意味ではない)であり、照会条件はDBObjectを用いて表している。例は以下の通りである。
DBCollection coll=db.get Collection(「collection 1」);
BaicDBObject cond=new BaicDBObject()
cond.put(「name」「kafka 0102」)
cond.put(「age」、28);
DBObject ret=coll.findOne(cond)
System.out.println(ret);
戻り結果はDBObjectで、get(key)で値を取ることができます。クエリー条件については、ネストされた多層によって複雑なフォーマットを表すことができる。
query=new Baic DBObject()
        query.put(「i」,new BaicDBObject(「$gt」,50);  // e.g.find all where i>50
4.2、find
find関数はクエリーセットで、DB CursorはDBObjectのサブエージェントです。使用例は以下の通りです。
DBCollection coll=db.get Collection(「collection 1」);
BaicDBObject cond=new BaicDBObject()
cond.put(「i」,new BaicDBObject(「$gt」,20).appnd(「$lte」,30);
DBCurrsor ret=coll.find(cond)
while(ret.has Next(){
   System.out.println(ret.next();
)
5、索引を使う
インデックス文を作成します。例えば、coll.creat Index(new BaicDBObject(「i」、1);ここで、iは索引のフィールドを表し、1は昇順(−1は降順)を表します。DBObjectはjavaクライアント共通の構造表現として見られます。インデックスを参照するにはDBCollection.get IndexInfo()関数を使用します。
6、MongoDB Java Driverの合併性
前述したように、Java MongoDB Driverは接続の池化処理を使用していますが、この接続池はデフォルトでは10個の接続を保持しています。Optionによって修正できます。アプリケーションではMongoの一例を使用すればいいです。接続池の各接続はDBPort構造を用いて表しており(DBCollectionではなく)、DBPortPoolに預けているので、DBCollectionの操作は同じ接続を使うという意味ではない。アプリケーションの一次要求の間に、同じ接続を使用することを保証する必要がある場合、次のコード断片が使用されてもよい。
DB db…
db.request Start()
//コード…
db.request Doone()
request Startとrequest Dooneの間で使う接続はDBPortPoolではなく、現在のスレッドの中のThreadLocal構造変数(MyPortでDBPortメンバーを保持しています)です。
7、その他の選択
Java mongodb driverはいいですが、JDBCを使わずにORMフレームを使う人が多いように、mongodbのjavaクライアントも他の選択があります。
1)POJOとDAOへのサポート。ORMに熱中する人たちにとって、Morphiaはhttp://code.google.com/p/morphia/wiki/QuickStart)これは、POJOにコメントを追加することにより、マッピングを実現し、DAOのCRUD操作をサポートします。
2)DSLへのサポート。Scultorはこのようなもので、利用者は中立的なDSLファイルを作成し、Sulptorはそれをコードに翻訳します。これは通常、マルチ言語のアプリケーションでない限り、DSLを複数のプログラミング言語に翻訳できます。そうでなければ、学習コストを増やす以外に、収益はあまりありません。
3)JDBCへのサポート。mono-jdbcはこのようなものですが、今はまだ実験的です。Javaプログラマーに近づきたいのかもしれませんが、JDBCと完全に互換できないのは明らかです。多くのJavaプログラマーはJDBCに対しても風邪を引かないので、あまり使う価値がありません。
8、参考資料
1、http://www.mongodb.org/display/DOCS/Java+Tutorial
2、http://api.mongodb.org/java/2.0/index.html
==========================================華やかな終止符=======================================================================
本文の作者:kafka 0102、転載する文章は出所を明記して下さい、ありがとうございます!
本論文のリンク:http://www.kafka0102.com/2010/07/209.html