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

grupper efter datoer i mongodb

Nyt svar ved hjælp af Mongo-aggregationsramme

Efter at dette spørgsmål var stillet og besvaret, udgav 10gen Mongodb version 2.2 med en aggregeringsramme, som nu er den bedre måde at udføre denne form for forespørgsel på. Denne forespørgsel er lidt udfordrende, fordi du vil gruppere efter dato, og de gemte værdier er tidsstempler, så du skal gøre noget for at konvertere tidsstemplerne til datoer, der matcher. Som eksempel vil jeg bare skrive en forespørgsel, der får de rigtige tal.

db.col.aggregate(
   { $group: { _id: { $dayOfYear: "$date"},
               click: { $sum: 1 } } }
   )

Dette vil returnere noget som:

[
    {
        "_id" : 144,
        "click" : 165
    },
    {
        "_id" : 275,
        "click" : 12
    }
]

Du skal bruge $match for at begrænse forespørgslen til det datointerval, du er interesseret i, og $project for at omdøbe _id til date . Hvordan du konverterer dagen på året tilbage til en dato, overlades som en øvelse for læseren. :-)

10gen har et praktisk SQL til Mongo Aggregation-konverteringsdiagram, der er værd at bogmærke. Der er også en specifik artikel om datosammenlægningsoperatører.

Hvis du bliver lidt mere avanceret, kan du bruge:

db.col.aggregate([
  { $group: {
      _id: {
        $add: [
         { $dayOfYear: "$date"}, 
         { $multiply: 
           [400, {$year: "$date"}]
         }
      ]},   
      click: { $sum: 1 },
      first: {$min: "$date"}
    }
  },
  { $sort: {_id: -1} },
  { $limit: 15 },
  { $project: { date: "$first", click: 1, _id: 0} }
])

som vil give dig de seneste 15 dage og returnere noget datetime inden for hver dag i date Mark. For eksempel:

[
    {
        "click" : 431,
        "date" : ISODate("2013-05-11T02:33:45.526Z")
    },
    {
        "click" : 702,
        "date" : ISODate("2013-05-08T02:11:00.503Z")
    },
            ...
    {
        "click" : 814,
        "date" : ISODate("2013-04-25T00:41:45.046Z")
    }
]


  1. Håndtering af MongoDB afbryde/genoprette forbindelse fra node

  2. Use cases til NoSQL

  3. Hvordan viser man base64-billedet i reaktion?

  4. Sådan bruger du mongoose Promise - mongo