MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Mongo:Jak grupować według $tydzień, ale zamiast tego zwracać datę rozpoczęcia i datę zakończenia każdego tygodnia?

Chociaż jest to wykonalne, sprawia, że ​​kod jest mniej czytelny i bardziej złożony.

Przepiszę $group etap do uwzględnienia year wraz z weeks i dodaj $project etap, aby sformatować dane zgodnie z wymaganiami.

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

Daj mi znać, jeśli potrzebujesz wyjaśnienia każdego użytego etapu i operatora oraz dlaczego go użyłem.

Wykonywanie próbki Mongo Playground



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nie można zapełnić tablicy poddokumentów Mongoose.js

  2. MongoDB- Wstaw, jeśli nie istnieje, w przeciwnym razie pomiń

  3. Jak wysyłać zapytania do obiektów zagnieżdżonych?

  4. Wykonywanie zapytań w MongoDB za pomocą znaków greckich przy użyciu JavaScript zwraca brak wyników

  5. Użyj $cond w $match w agregacji mongoDB