sql >> Databáze >  >> NoSQL >> MongoDB

seskupit podle dat v mongodb

Nová odpověď pomocí agregačního rámce Mongo

Poté, co byla tato otázka položena a zodpovězena, 10gen vydala Mongodb verze 2.2 s agregačním rámcem, což je nyní lepší způsob, jak provádět tento druh dotazů. Tento dotaz je trochu náročný, protože chcete seskupit podle data a uložené hodnoty jsou časová razítka, takže musíte udělat něco pro převod časových razítek na data, která se shodují. Pro účely příkladu napíšu pouze dotaz, který dostane správné počty.

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

To vrátí něco jako:

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

Musíte použít $match pro omezení dotazu na časové období, které vás zajímá, a $project přejmenovat _id do date . Jak převést den v roce zpět na datum je ponecháno jako cvičení pro čtenáře. :-)

10gen má praktický graf konverze SQL na Mongo agregaci, který stojí za to přidat do záložek. Existuje také zvláštní článek o operátorech agregace dat.

Když budete trochu milejší, můžete použít:

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

což vám poskytne posledních 15 dní a vrátí nějaké datum a čas v každém dni v date pole. Například:

[
    {
        "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. Nelze najít dokumenty vyhledávající podle ObjectId pomocí Mongoose

  2. Docker:změňte složku, kam se mají ukládat svazky dockeru

  3. redis:zálohování dump.rdb

  4. Použití redis jako mezipaměti pro databázi mysql