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プログラミング開発を簡略化することができます.例えば、本明細書で設計した入力パラメータには、クエリー条件、クエリー指定列、ソート、ページングがあります.
サービス例1を呼び出します.SQL文はselect sdept,schemeName,beginTime,overTime from ZFSP order by beginTimeです.
ここで,入力クエリ条件は空であり,{}として表される.
クエリー条件付き({beginTime:{gt:2016-03-01}})では、クエリーサービスが呼び出されます.
結果はJSON形式の文字列で、クエリ結果セット総数(collCount:82)、クエリ条件(queryStr:{"beginTime":{"$gt":"2016-03-01"}})、クエリ指定列(queryKey:{"schemeName":1,beginTime":1},)、およびコアマルチラインデータ(data)が識別されます.
結果は次のとおりです.
注意事項: MongoDBクエリーオペレータには「$」があり、JQueryと競合しています. MongoDBデフォルトidは「_id」で、アルファベットの先頭にないキーワードは、JSON解析と衝突しています. 他の論理オペレータ、例えば「$or」などは、後続の実際の応用において、クエリーサービスを徐々に豊かにする. フロントエンド解析フィードバックページに表示された複数行のデータも、リレーショナル・データベースとインタラクティブにデータを取得するなど、使いやすい関数にカプセル化する必要があります. 本文はページを検索してskip関数を使用して、ネットユーザーはできるだけ少なく使うことを提案して、後で最適化します.
参考:《(回転)Mongodbとsql文対照》2011.11《java操作mongodb(ページング)》2014.12褚金輝《初学MongoDB実践ノート——データベースのインストール、作成、データの保存と照会》2015.01肖永威
しかし,クエリー開発では,自己符号化で解決する必要があり,面倒であるため,いくつかのクエリーサービスを行い,需要応答効率を向上させることが考えられる.
クエリーサービス設計目標:
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とsql文対照》2011.11《java操作mongodb(ページング)》2014.12褚金輝《初学MongoDB実践ノート——データベースのインストール、作成、データの保存と照会》2015.01肖永威