sql >> Database >  >> NoSQL >> MongoDB

Hoe gebruik ik aggregatie-operators in een $match in MongoDB (bijvoorbeeld $year of $dayOfMonth)?

Zoals je al hebt gevonden, kun je geen $matchen op velden die niet in het document staan ​​(het werkt precies hetzelfde als zoeken) en als je eerst $project gebruikt, verlies je de mogelijkheid om indexen te gebruiken.

Wat u in plaats daarvan kunt doen, is uw inspanningen als volgt combineren:

{
    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'}
             }
          }
    ]
 }

Het bovenstaande geeft u alleen een aggregatie voor september, als u voor meerdere maanden wilt aggregeren, kunt u bijvoorbeeld:

{
    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'}
             }
          }
    ]
 }

en je krijgt zoiets terug als:

{
    "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. Mongo-aggregatieraamwerk, sorteren en vervolgens groeperen werkt niet

  2. MongoDB actief maar kan geen verbinding maken via shell

  3. bij het verwijderen van een document uit de gelimiteerde verzameling in mongoDB, dit door een fout?

  4. Hoe te controleren of het geselecteerde e-mailadres en de naam al bestaan ​​in MongoDB