輸入com.alibaba.fastjson.JSON; 輸入com.alibaba.fastjson.JSONObject; 輸入com.mongodb.client.ListIndexesIterable; 輸入com.mongodb.client.model.IndexOptions。 輸入com.mongodb.client.model.Indexes。 輸入org.bson.Document; 輸入org.springframework.beans.factory.annotation.Autowired; 輸入org.springframework.data.mongodb.core.MongoTemplate; 輸入org.springframework.data.mongodb.core.query.Criteria; 輸入org.springframework.data.mongodb.core.query.Query; 輸入org.springframework.data.mongodb.core.query.Update; 輸入org.springframework.stereotype.Component; 輸入org.springframework.util.ObjectUtils。 輸入はjava.util.ArrayList; 輸入はjava.util.List; 輸入java.util.Map; / ** * @author 明 * @Date 27/12/2019 11:21 * @Desc MongoDBの操作ツール * / @成分 パブリック クラス MongoDBHelper <T> { / ** *インジェクションテンプレート * / @Autowired プライベートMongoTemplate mongoTemplate。 / ** *機能:コレクションを作成します。 *同じセットは、我々は利便性のためにパフォーマンスを維持し、向上させる、さまざまなタイプの複数のオブジェクトに格納することができ、 *フォローアップセットに格納されたオブジェクトの種類を制限するために、データの種類、すなわちセットを記憶することができます * * @Param 、コレクションの名前を命名従来のデータベースのテーブル名の同等 * @return ます。void * / パブリック 無効createCollection(文字列名){ mongoTemplate.createCollection(名); } / ** *機能:インデックスを作成します。 *インデックスを命じた、とユニークインデックスされます * * @Param COLLECTIONNAMEコレクション名、同等のリレーショナルデータベースのテーブル名に * @param プロパティ名filedNameオブジェクトを * @Return :java.lang.Stringで * / パブリック文字列CREATEINDEX(COLLECTIONNAME文字列、文字列filedName){ // 設定指数オプション のIndexOptionsオプション= 新しい新しいのIndexOptions(); // ユニークにセット (options.unique 真の); // 作成昇順でのプレスfiledNameインデックス のリターンmongoTemplate.getCollection(COLLECTIONNAME).createIndex(Indexes.ascending(filedName)、オプション); } / ** *機能説明:セットに対応するすべての現在のインデックスの名前を取得します。 * * @param COLLECTIONNAME * @return :java.util.Listに<java.lang.Stringで> * / パブリックリストの<string> getAllIndexes(文字列COLLECTIONNAME){ ListIndexesIterable <文書>リスト= mongoTemplate.getCollection(COLLECTIONNAME).listIndexes(); // 上記のリストは直接のArrayListの初期サイズに設定することなく、大きさ、したがって初期化を取得していない リストの<string> =インデックスを新しい新規のArrayList <> (); のため(org.bson.Documentドキュメント:リスト){ document.entrySet()はforEach((キー)。 - > { // インデックスの抽出された名前 IF(key.getKey()等号( "名前" )){ indexes.add(key.getValue()のtoString())。 } }); } リターン・インデックス。 } / ** *機能:対応のセットにデータを挿入 * * @Param 情報ストレージ・オブジェクト * @Param COLLECTIONNAMEコレクション名 * @return ます。void * / 公共 のボイド挿入(T情報、文字列COLLECTIONNAME){ mongoTemplate.insert(情報、COLLECTIONNAME)。 } / ** *機能:への一括挿入データ、重複しないバッチデータidの注目を対応する設定 * * @param に関する情報がリストオブジェクト * @return ます。void * / 公共 のボイド insertMulti(リスト<T> に関する情報、文字列COLLECTIONNAME){ mongoTemplate.insert(に関する情報、COLLECTIONNAME)。 } / ** *機能説明:データの正確な変更にインデックス情報を使用して * * @param 言及ID一意のキーの上 * @Param COLLECTIONNAMEコレクション名 * @Param 更新される情報の内容 * @return :ボイド * / 公共 ボイドupdateById(文字列ID、文字列COLLECTIONNAME、T情報){ クエリのクエリ = 新しいクエリ(Criteria.where( "ID" ).is(ID)); アップデートアップデート = 新しいアップデート(); 文字列strの = JSON.toJSONString(情報)。 JSONObjectのjQuery = JSON.parseObject(STR)。 jQuery.forEach((キー、値) - > { // プライマリキーID従来のデータベースは、このアップデートの使用をサポートしていないのと同等として、それが外に雑草に必要である IF(key.equals(「ID」! )){ update.set(キー、値)。 } }); mongoTemplate.updateMulti(クエリ、更新、info.getClass()、COLLECTIONNAME)。 } / ** *機能:IDは、コレクションの内容を削除します * * @Param IDシーケンスID * @Param COLLECTIONNAMEコレクション名 * @Param コレクション内の型clazzオブジェクト * @return ます。void * / 公共 のボイド deleteById(文字列ID、クラス<T> clazz、文字列COLLECTIONNAME){ // #= {ID} IDセットクエリの条件、 クエリのクエリ= 新しい新しいクエリ(Criteria.where( "ID"は)(ID)を.is) ; // あなたは、オブジェクト型を渡すだけで、コレクション名を渡さない場合は、時間内にMongoDB削除オブジェクトは、オブジェクトのタイプを決定し、それを見つけることができません // 管理を容易にし、その後の処理のパフォーマンスを改善するために、私たちの上になりますあなたは、自己管理オブジェクトの種類に必要なオブジェクトの種類を制限するの収集、 // インターフェースが入ってくるときに、オブジェクト型を渡す必要 mongoTemplate.remove(クエリ、clazz、COLLECTIONNAME) 。 } / ** *機能の説明:係るIDクエリ情報 * * @param 言及したIDのコメント上記 * @Param clazzタイプ * @Param COLLECTIONNAMEコレクション名 * @return :java.util.Listの<T> * / 公共 T selectById(文字列ID、クラス<T> clazz、文字列COLLECTIONNAME){ // だけでなく、このユニークなキーIDを渡す必要があるクエリオブジェクトも、オブジェクトの型を渡す必要があり、コレクションの名前 リターン(mongoTemplate.findById ID、clazz、COLLECTIONNAME)。 } / ** *機能:クエリリスト情報 *データのすべてのタイプを満たすオブジェクトのコレクションをチェックしてください * * @Param collectNameコレクション名 * @Param clazzタイプ * @return :java.util.Listに<T> * / パブリックリスト<T> SelectListの(文字列collectName、クラス<T> clazz){ 戻り SelectListの(collectName、clazz、NULL、NULL ); } / ** *機能の説明:ページングクエリリスト情報 * * @Param collectNameコレクション名 * @Param clazzオブジェクトタイプ * @Param currentPageに現在のページ * @Param のpageSizeページサイズ * @Return :java.util.Listに<T> * / パブリックリスト<T> SelectListのである(文字列collectName、クラス<T> clazz、currentPageに整数、整数のpageSize){ // セットページングパラメータ クエリのクエリ= 新しい新しいクエリ()。 // セットページ情報 IF(!ObjectUtils.isEmpty(currentPageに)&& ObjectUtils.isEmpty(pageSizeを)){ query.limit(pageSizeを)。 query.skip(pageSizeを *(currentPageに- 1 )); } リターンmongoTemplate.find(クエリ、clazz、collectName)。 } / ** *機能:クエリ条件のセットに基づいて、 * * @Param collectNameコレクション名 * @Param 条件のクエリ、現在のクエリ処理が同じ試合を行うだけで、我々はファジーマッチングクエリの複雑さをしませんでした、比較的簡単です * @Param clazzオブジェクトタイプ * @Param currentPageに現在のページ * @Param のpageSizeページサイズ * @return :java.util.Listの<T> * / 公共リスト<T> selectByCondition(文字列collectName、地図<文字列、文字列>の条件、クラス<T> clazz、整数currentPageに、整数のpageSize){ 場合(ObjectUtils.isEmpty(条件)){ リターンSelectListの(collectName、clazz、currentPageに、ページサイズ); } 他{ // セットページングパラメータ クエリのクエリ= 新しい新しいクエリ()。 query.limit(pageSizeを)。 query.skip(currentPageに)。 //は、クエリにクエリを注入 conditions.forEach((キー、値) - > query.addCriteria(Criteria.where(キー))(値).is)を、 リターンmongoTemplate.find(クエリ、clazz、collectName)。 } } / ** *機能:クエリ条件のセットに基づいて、 * @Param collectNameコレクション名 * @Param クエリのクエリ * @Param clazzオブジェクトタイプ * @return * / 公共のリスト<T> selectByQuery(文字列collectName、クエリ、クエリ、クラス<T> clazz){ リスト <T>結果= mongoTemplate.find(クエリ、clazz、collectName)。 戻り値の 結果; } }