JavaクエリーMongoDBデータベースを使用してクエリー・サービス・プラクティスにカプセル化


管理サポートプラットフォームプロジェクトにおいて、プロセス承認書データ実施方案はMongoDBストレージ管理技術を採用する.この技術は従来のリレーショナルデータの設計、開発よりずっと簡単です.
しかし,クエリー開発では,自己符号化で解決する必要があり,面倒であるため,いくつかのクエリーサービスを行い,需要応答効率を向上させることが考えられる.
クエリーサービス設計目標:
MongoDB Client Shellと関数を使用して、SQL文のDMLのように、クエリーを迅速に実施し、バックエンドコードをできるだけ少なく書き、類似の構成でクエリーサービスを提供します.
SQL
MongoDB
説明
select * from user where age<40 order by c
db.user.find({“age”:{$lt:40}}).sort({c:1})
検索
select count(*) from user where age<40
db.user.find({“age”:{$lt:40}}).count()
照会、要約
select a,b from user where age>8
db.user.find({“age”:{$gt:8},{a:1,b:1}})
クエリー作成列
上記の比較により、クエリーコマンドをセグメント化して入力することで、Javaプログラミング開発を簡略化することができます.例えば、本明細書で設計した入力パラメータには、クエリー条件、クエリー指定列、ソート、ページングがあります.
    /** *    MongoDB         ,     "$"   * @param jsonStr, MongoDB Client  shell      * @param jsonKey,        (  ) * @param collection,      * @param page,    * @param pageSize,     ,  pageSize=0,      * @param sortKey,   shell     ,   _id   * @return   JSON   ; collCount,           ;data,          */

    public static String findMongoSimplePage(String jsonStr,String jsonKey, String collection,int page,int pageSize,String sortKey){
        String docStr = null;
        //    
        BasicDBObject queryObject = new BasicDBObject();
        //        
        BasicDBObject queryKey = new BasicDBObject();
        //      
        BasicDBObject querySortKey = new BasicDBObject();
        //      collection
        DBCollection coll = MongoDBUtil.getCollection(collection);

        JSONObject jsonObject = JSONObject.fromObject(jsonStr);

        Iterator<String> tmp = jsonObject.keys();
        while (tmp.hasNext()){
            String keyStr = tmp.next();

            try{
                JSONObject relationObject = jsonObject.getJSONObject(keyStr);
                Iterator<String> tmpRelation = relationObject.keys();
                if (tmpRelation.hasNext()){
                    String relationKey = tmpRelation.next();
                    String relationStr = relationObject.getString(relationKey);

                    queryObject.append(keyStr, new BasicDBObject("$" + relationKey,relationStr));
                }else{

                }
            }catch(Exception e){
                //e.printStackTrace();
                String val = jsonObject.getString(keyStr);
                // MongoDB       ,        
                if (keyStr.equals("_id")){
                    queryObject.append(keyStr,new ObjectId(val) );
                }else{
                    queryObject.append(keyStr, val);                
                }
            }

        }   

        String key[] = jsonKey.split(",");

        for (int i=0;i<key.length;i++){
            queryKey.append(key[i], 1);
        }

        JSONObject sortObject = JSONObject.fromObject(sortKey);
        Iterator<String> tmpSort = sortObject.keys();
        while (tmpSort.hasNext()){
            String keyStr = tmpSort.next();

            int val = sortObject.getInt(keyStr);

            querySortKey.append(keyStr, val);
        }        

        DBCursor cursor = null;

        long collCount = coll.find(queryObject,queryKey).count();
        //        
        if (querySortKey.size()>0 && pageSize >0){
            cursor = coll.find(queryObject,queryKey).sort(querySortKey).skip((page-1)*pageSize).limit(pageSize);

        }else if (querySortKey.size()>0 && pageSize == 0){
            //  ,   
            cursor = coll.find(queryObject,queryKey).sort(querySortKey);
        }else if (querySortKey.size()==0 && pageSize >0){
            //   ,  
            cursor = coll.find(queryObject,queryKey).skip((page-1)*pageSize).limit(pageSize);
        }else{
            cursor = coll.find(queryObject,queryKey);
        }

        List<DBObject> list = new ArrayList<DBObject>();

        while (cursor.hasNext()){
            DBObject dboject = cursor.next();
            System.out.println(dboject.toString());
            list.add(dboject);

        }
        //    JSON   
        docStr = "{collCount:" + collCount + ",";
        docStr = docStr + "queryStr:" + queryObject.toString() + ",";
        docStr = docStr + "queryKey:" + queryKey.toString() + ",";
        docStr = docStr + "data:" + list.toString() + "}";

        return docStr;
    }

サービス例1を呼び出します.SQL文はselect sdept,schemeName,beginTime,overTime from ZFSP order by beginTimeです.
ここで,入力クエリ条件は空であり,{}として表される.
<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP:Body>
    <FindMongoSimplePage xmlns="http://unicom.com/common/attachment" preserveSpace="no" qAccess="0" qValues="">
      <jsonStr>{}</jsonStr>
      <jsonKey>sdept,schemeName,beginTime,overTime</jsonKey>
      <collection>ZFSP</collection>
      <page>1</page>
      <pageSize>10</pageSize>
      <sortKey>{beginTime:1}</sortKey>
    </FindMongoSimplePage>
  </SOAP:Body>
</SOAP:Envelope>

クエリー条件付き({beginTime:{gt:2016-03-01}})では、クエリーサービスが呼び出されます.
<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP:Body>
    <FindMongoSimplePage xmlns="http://unicom.com/common/attachment" preserveSpace="no" qAccess="0" qValues="">
      <jsonStr>{beginTime:{gt:2016-03-01}}</jsonStr>
      <jsonKey>schemeName,beginTime</jsonKey>
      <collection>ZFSP</collection>
      <page>1</page>
      <pageSize>5</pageSize>
      <sortKey>{beginTime:1}</sortKey>
    </FindMongoSimplePage>
  </SOAP:Body>
</SOAP:Envelope>

結果はJSON形式の文字列で、クエリ結果セット総数(collCount:82)、クエリ条件(queryStr:{"beginTime":{"$gt":"2016-03-01"}})、クエリ指定列(queryKey:{"schemeName":1,beginTime":1},)、およびコアマルチラインデータ(data)が識別されます.
結果は次のとおりです.
<data>
  <FindMongoSimplePageResponse xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://unicom.com/common/attachment" preserveSpace="no" qAccess="0" qValues="">
    <tuple>
      <old>
        <findMongoSimplePage>
          <findMongoSimplePage>{collCount:82,queryStr:{ "beginTime" : { "$gt" : "2016-03-01"}},queryKey:{ "schemeName" : 1 , "beginTime" : 1},data:[{ "_id" : { "$oid" : "56d7969084ae9c1c2c4c47d8"} , "schemeName" : "  " , "beginTime" : "2016-03-03"}, { "_id" : { "$oid" : "56dcd58284ae9c1c2c4c47e4"} , "schemeName" : "114747" , "beginTime" : "2016-03-07"}, { "_id" : { "$oid" : "56dcf31884ae9c1c2c4c47ea"} , "schemeName" : "888" , "beginTime" : "2016-03-07"}, { "_id" : { "$oid" : "56dcdc2484ae9c1c2c4c47e8"} , "schemeName" : "2344" , "beginTime" : "2016-03-07"}, { "_id" : { "$oid" : "56dcf62084ae9c1c2c4c47ec"} , "schemeName" : "11111" , "beginTime" : "2016-03-07"}]}</findMongoSimplePage>
        </findMongoSimplePage>
      </old>
    </tuple>
  </FindMongoSimplePageResponse>
</data>

注意事項:
  • MongoDBクエリーオペレータには「$」があり、JQueryと競合しています.
  • MongoDBデフォルトidは「_id」で、アルファベットの先頭にないキーワードは、JSON解析と衝突しています.
  • 他の論理オペレータ、例えば「$or」などは、後続の実際の応用において、クエリーサービスを徐々に豊かにする.
  • フロントエンド解析フィードバックページに表示された複数行のデータも、リレーショナル・データベースとインタラクティブにデータを取得するなど、使いやすい関数にカプセル化する必要があります.
  • 本文はページを検索してskip関数を使用して、ネットユーザーはできるだけ少なく使うことを提案して、後で最適化します.

  • 参考:《(回転)Mongodbとsql文対照》2011.11《java操作mongodb(ページング)》2014.12褚金輝《初学MongoDB実践ノート——データベースのインストール、作成、データの保存と照会》2015.01肖永威