sql >> データベース >  >> NoSQL >> MongoDB

Mongo:$ weekでグループ化する方法ですが、代わりに各週の開始日と終了日を返しますか?

    実行可能ですが、コードが読みにくくなり、複雑になります。

    $groupを書き直します yearを含めるステージ weeksと一緒に $projectを追加します 要件に従ってデータをフォーマットする段階。

    db.collection.aggregate([
      {
        "$group": {
          "_id": {
            "week": {
              "$week": {"$subtract": ["$at", 25200000]}  // <-- Changes timezone to -07:00
            },
            "year": {
              "$year": {"$subtract": ["$at", 25200000]}  // <-- Changes timezone to -07:00
            },
          },
          // <-- Add keys to be added in group along with its logics
          "averageValue": {
            "$avg": "$readings.level_1"
          }
        },
      },
      {
        "$project": {
          "_id": {
            "startDate": {
              "$dateToString": {
                "date": {
                  "$dateFromParts": {
                    "isoWeekYear": "$_id.year",
                    "isoWeek": "$_id.week"
                  }
                },
                "format": "%Y-%m-%d",
              },
            },
            "endDate": {
              "$dateToString": {
                "date": {
                  "$add": [
                    {
                      "$dateFromParts": {
                        "isoWeekYear": "$_id.year",
                        "isoWeek": "$_id.week"
                      }
                    },
                    518400000,
                  ],
                },
                "format": "%Y-%m-%d",
              },
            },
          },
          // <-- Add remaining keys to be projected
          "averageValue": 1,
        },
      },
    ])
    

    使用した各ステージとオペレーターの説明が必要な場合は、私が使用した理由を教えてください。

    MongoPlaygroundサンプルの実行



    1. mongoを使用してすべてのドキュメントで配列の出現をカウントします

    2. MongoDB$sumアグリゲーションパイプラインオペレーター

    3. サーバー側のjavascript関数にはmongoDBのパフォーマンスの問題がありますか?

    4. Mongoはポート27017(localhost)に自動的に接続しようとします