sql >> Database >  >> NoSQL >> MongoDB

Mongo:Hoe groeperen op $week, maar in plaats daarvan de startdatum en einddatum van elke week teruggeven?

Hoewel het te doen is, maakt het de code minder leesbaar en complexer.

Ik zal de $group herschrijven fase om year op te nemen samen met weeks en voeg het $project . toe stap om de gegevens te formatteren volgens de vereisten.

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,
    },
  },
])

Laat het me weten als je uitleg nodig hebt over elke gebruikte fase en operator en waarom ik die heb gebruikt.

Mongo Playground-voorbeelduitvoering



  1. Klasse 'MongoClient' niet gevonden

  2. MongoCollection::aggregate() is niet gedefinieerd in Heroku PHP met MongoHQ

  3. Optimale plug-ins en project om IntelliJ IDEA voor JavaScript te gebruiken?

  4. Hoe Mongo DB verbinden met Android-applicatie