NESTJS,マングースを用いた多重探索フィルタ


The fields are all optional.The user can search for results using multiple fields given below:
1. Select Country
2. Project Type
3. Practice Area
4. Investment Range - Less than /Greater than
5. Project tenure
ここで、フィールドはクエリーパラメタとして、そして、ポストHTTPリクエストでボディーとしても渡されます.PerifeareaとTypeがクエリパラメータとして送信される間、保有権、国、およびfundsRailedはボディJSONに渡されます.
ポストhttp://localhost:3000/api/v1/sme-project/filter/projectTenureFilter?practiceArea=Hardware&type=Private
    "country": "Australia",
    "fundsRequired": 20000,
    "lessThanFundsRequired": false
}
a tenureが空でなければ、22〜35行目が実行される.
b .実行領域が空でなければ、37〜39行目が実行される.
c型が空でない場合、行40から42までが実行されます.
d . fundsrequiredが空でなければ、44から52までが実行されます.
E .国フィールドが空でなければ、ライン55〜85が実行される.
このように、クエリオブジェクトは検索時にユーザーが入力したフィールドのみを対象として構築されます.これは、複数の検索クエリが構築され、クエリに使用されるmongooseです.また、ページの検索は、検索結果が行われます.
コード(パートI )
//このプリアンブル領域にJavaScriptコードを設定します
コンストHiddenvar = 42
インポート
コントローラ
ゲット
使用人
リクエスト
クエリ
プット
ボディー
ポスト
BadRequestException ,
非営利法人
削除
から次へ
インポート
SmeProjectDTO
CreateSmejecttTo ,
UPDATEプロジェクト
から取得します.
インポート
バス停
UserRange型
生理活性物質
アクティブスポンサー
プロジェクトのステータス
状態
キルギスの現状
プロジェクトの保有権
Timelineum PresenceRank 0
から取得します.
"\/common/base/base . controller "からのインポート{ AbstractBaseControllerFactory }
"/sme project . service "からインポート{ SmeProjectService }
インポート
ユーザ名
アステロイドコッサ
から"}を呼び出します
"\/auth/auth . guard "からimport { jwauthguard }を指定します.
からのインポート{成功}
"\/共通/パイプ/クラス変圧器パイプから
インポート
ONLY_FOR_SME,
プロジェクトEditCountエラー
この関数は、
この関数は、
この関数は、
この関数は、
この関数は、
プロジェクトに必要なエラー
<資料>
この関数は、
エラーが発生しました.
プロジェクトの概要
PROTECHECTHER STENTUSHI CHANGEHEN ERRORRAND SMERAKE KYCHENT NOTHERN承認された.
フォンスポスポンサー
ユーザが指定した場合、
"/common/定数/string "から
"/smeアクティビティーフィード/smeアクティビティーフィードからのインポート{ SmeActivityFeedService }
パスポートからのインポート
"\/アクティビティフィード/アクティビティーフィードから"
からのインポート{ injectmodel };
マングースからのインポート
「./Object/sme project . schema」からインポート{ ismeproject }
"\/入札詳細/入札詳細"サービスからのインポート{ BitDetailsService }
"\/入札詳細/オブジェクト/入札詳細からのインポート{ ibidDetail }
"/user/users . service "からimport { usersservice }を指定します.
クラストランスからのインポート
"\/common/interface/pagination "からimport { normalizepaginateresult };
"\/エンティティの詳細/オブジェクト/エンティティの詳細から"iEntityDetail }をインポートします.
"\/好きなプロジェクト/オブジェクト/お気に入りプロジェクトから"ifavouriteproject }をインポートします.
コンストベースのController
以下のようにします.
作成します.
update : updatesmeProjectdto
無効にする
//出力します.デビュロン
バレアウトー.パッチ

));
useguard ( jwtauthguard )
コントローラ( SMEプロジェクト)
エクスポートクラスSmeProjectControllerはBaseControllerを拡張する
コンストラクタ
プライベートSmeProjectService : SmeProjectService ,
プライベートSmeActivityFeedService : SmeActivityFeedService
プライベートActivityFeedService : ActivityFeedService
プライベートユーザサービス:ユーザサービス
//プライベートIDのサービス: BitDetailsService
/@ injectmodel (「詳細」)
//プライベートReadOnly BandDetailモデル:モデル
@ injectmodel ("smeproject ")
プライベートReadOnly SmeProjectModel :モデル
@ injectmodel ("EntityDetail ")
プライベートReadOnly EntityDetailsModel :モデル
@ injectmodel ("faviteproject ")
プライベートReadOnly AdapiteProjectsモデル:モデル
){ { } { }
Super ( SmeProjectService );

useguard ( jwtauthguard )
POST ("フィルタ/プロジェクトチェックフィルタ")
非同期FindListFilterKyStatus (
リクエスト()
query ()クエリ
ユーザ名
body body (); { tenure : string ; country : string ; fundrequired : number ; LessFuntsrequired : Boolean ; }
){ { } { }
を返します.
varオプション
制限:3
ページ: 1
並べ替え: "CHERID "
スキップ:クエリ.ページ?( query . 1 - 1 ) : 0
//
みましょう:任意の
ちょっとしたQ:どんな
を返します.
スイッチを入れる
症例(チビトゲ科0.
注意してください.
ブレイク
ケース( Timelinedae Photencepersy 0 . SixCage Monthstle - TONES ONECHECH年)
t ={ $&:[{ tenure : { $ lte : 12 }}, { tenure : { $ gt : 6 }}} }
注意:
ブレイク
一例(キク科)
注意してください.
ブレイク


を返します.
注意してください.

を返します.
注意してください.

を返します.
スイッチ(本体.
偽の場合:
注意してください.
ブレイク
ケースTRUE :
注意してください.


を返します.
次のようにします.
var useridsArray : string [] =[] ;
var SmeUseridsArray : string [] =[] ;
EntityDetail =これを待ちましょう.EntityDetailモデル.見つける
{会社名アドレス国:body . country }
{ }
{ }
ソート{ { } }
//スキップします: 0
//制限: 30
投影

);
約束を待つ.すべて
注意事項.MAP ( async ( element )>> {マップ}
UseridsArrayを待つ.push ( element . createdby );
コンソール.ログ("userssssssssarray ", useridsarray );
))>
);
約束を待つ.すべて
useridsarray.MAP ( async ( element )>> {マップ}
これを待つ.ユーザサービス.findone (要素);
を返します.
SMEUseridsArrayを待ちます.プッシュ(Kコード);

))>
);
q ={ createdby : SmeUseridsArray };
注意:

注意してください.
これを待つ.SmeProjectModel見つける
注意
{ }{ { } { } }
スキップ:オプション.スキップ*オプション.制限、制限:オプション.制限、投影
);
これを待つ.SmeProjectModelカウント
注意
);
var projectidsArray : string [] =[] ;
d . mapを指定します.
「プロジェクト」ウィンドウを待ちます.プッシュ(データ);
));
q ={ code : projectidsarray }とする
これを待つ.Findlist ( req , q , user );
次のようにします.
合計:dcount/
制限:オプション.制限
ページ:クエリー.ページ///オプション.ページ
ページ:Dページ.
));
返り値