NODEJS、Expressjs、Redis、MongoDBシリーズシリーズ



イントロ
これらの2つのコードスニペットは、同じ動作をします.
そのコードは何をしていますか.
それがちょうどそれを読んでいると理解するのに十分直感的であるならば、見てください.
完全な説明のために以下の「メモ」セクションを読んでください.
スニペットA.
app.post(apiEnum.api_findgroup_artistyearsformed, async (req, res) => {
  res.json(
    await mgArr_redis(dbEnum.nlpdb, collEnum.songsColl, "artistyearsformed"
      { $match: { formed: { $exists: true } } },
      { $group: { _id: "$formed", count: { $sum: 1 } } },
      { $project: { _id: 0, formed: "$_id", count: 1 } },
      sort({ count: -1, hw: 1 }),
    ));
});

スニペットB.
app.post(apiEnum.api_findgroup_artistyearsformed, async (req, res) => {
  res.json(
    await mgArr_redis(dbEnum.nlpdb, collEnum.songsColl, "artistyearsformed",
      matchExists("formed"),
      groupCount("formed"),
      renameGroupKey("formed"),
      sortDescSecondaryAsc("count", "formed"),
    ));
});

ノート
  • コードスニペットAは生のMongoDBデータベース質問構文
  • です
  • コードスニペットBは、単に問い合わせパイプラインの各ステージのまわりのラッパーfuncです.
  • DBコールはこのDataShapeを返します.それぞれの年に結成されたバンド数のリストを示します.
  • /*
      { count: 13, formed: '2001' },
      { count: 10, formed: '2000' },
      { count: 14, formed: '1999' },
      { count: 4, formed: '1998' },
    */
    
  • MongoDBクエリをノードにラップします.JSエクスプレスジュルート.
    したがって、このクエリはデータをルートにアクセスする権限を持っている人に返します.
  • app.post(apiEnum.api_findgroup_artistyearsformed, async (req, res) =>
    
  • として、唯一の登録ドメインは、この構成を経由して、このルートにアクセスできます.
  • app.use(cors({ credentials: true, origin }));
    
  • このresultsetは非常に安定したデータであるので、それはキャッシングの候補です.私はMGARRのバリアントを使用します.これは、3番目のパームをキャッシュキー(この場合、“ArtistYearsFormation”)として扱います.これは結果セットを一意に識別します.有効期限は設定可能であり、デフォルトは2時間です.それはあなたのDBから大きな負荷をとります:
  • await mgArr_redis(dbEnum.nlpdb, collEnum.songsColl, "artistyearsformed",
    
  • これらの音楽家/アーティスト文書を保持しているMongoDBコレクションは、4桁の年を保持する「形成される」という名前のフィールドを持ちます.
  • Matchexists(「形成された」)は、彼らの年が形成される彼らの年
  • を報告しないアーティストを除外するのに用いられます
    あなたがわかるように、24579172は、Mongoの「グループ」(別名「グループby」)をすることはケーキとして簡単です.
  • に注意してください、「スニペットB」はよりきれいで、それが何をするかについて伝えることにより意味的に豊かです.データベースクエリのビルディングブロック(ステージ)のように読みます.生のまたはwrapper構文は、「mgarr」ユーティリティfuncを使うとき、交換可能です.
  • 二次(または3番目または任意の数)のソートを行っている
  • はMongoDBにおいて皮である.

  • 次は何ですか.
    今日我々はカバーしました.
    ※表現付きの路線
    ** ExpressJSルートの確保
    *** READISでキャッシュする
    ** MongoDB でデータをグループ化する
  • あなたが質問をするならば、私に
  • を知らせてください
    シリーズが進むにつれて、私たちはもっと深く行きます.