sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan bruger jeg aggregeringsoperatorer i et $match i MongoDB (for eksempel $year eller $dayOfMonth)?

Som du allerede har fundet, kan du ikke $matche på felter, der ikke er i dokumentet (det fungerer nøjagtigt på samme måde, som find virker), og hvis du bruger $project først, vil du miste muligheden for at bruge indekser.

Det, du i stedet kan gøre, er at kombinere din indsats på følgende måde:

{
    aggregate: 'posts',
    pipeline: [
         {$match: {
             created_date : 
                  {$gte:{$date:'2012-09-01T04:00:00Z'}, 
                  $lt:  {date:'2012-10-01T04:00:00Z'} 
                  }}
             }
         },
         {$group:
             {_id: '0',
              totalComments:{$sum:'$comments'}
             }
          }
    ]
 }

Ovenstående giver dig kun aggregering for september, hvis du ønskede at aggregere i flere måneder, kan du f.eks.:

{
    aggregate: 'posts',
    pipeline: [
         {$match: {
             created_date : 
                  { $gte:'2012-07-01T04:00:00Z', 
                    $lt: '2012-10-01T04:00:00Z'
                  }
         },
         {$project: {
              comments: 1,
              new_created: {
                        "yr" : {"$year" : "$created_date"},
                        "mo" : {"$month" : "$created_date"}
                     }
              }
         },
         {$group:
             {_id: "$new_created",
              totalComments:{$sum:'$comments'}
             }
          }
    ]
 }

og du får noget som:

tilbage
{
    "result" : [
        {
            "_id" : {
                "yr" : 2012,
                "mo" : 7
            },
            "totalComments" : 5
        },
        {
            "_id" : {
                "yr" : 2012,
                "mo" : 8
            },
            "totalComments" : 19
        },
        {
            "_id" : {
                "yr" : 2012,
                "mo" : 9
            },
            "totalComments" : 21
        }
    ],
    "ok" : 1
}


  1. Sådan skubbes nye elementer til et array inde i et objekt

  2. MongoTemplate metode eller forespørgsel til at finde maksimale værdier fra en fil

  3. MongoError:tilslut UNKENDT

  4. Find dokumenter i MongoDB, hvis med et matrixfelt er en delmængde af et forespørgselsarray