1

集計フレームワークを使用しています。ここまでは順調ですね。

conn = Mongo::Connection.new
db   = conn['foobar_development']

cmd = {
  aggregate: 'live_daily_stats',
  pipeline: [
    # { '$match' => { :_id => "20120725/foobar/song/custom-cred" } },
    { '$project' => {
      :visits => 1,
    } },
    { '$unwind' => '$visits' },
    # { '$group' => {
    #   :_id => '$_id'
    # } },
    { '$match' => { 'visits.minute' => { '$gt' => 224 } } },
    { '$sort' => { 'visits.minute' => 1 } },
    # { '$group' => { :_id => '$_id' } },
  ]
}

res = db.command(cmd)['result']

results以下を返します。ご覧のとおり、4つの結果があります。それは2つに分類され_idsます。visitsそれらの下にグループ化するにはどうすればよい_idsですか?

[
    [0] {
           "_id" => "20120725/foobar/song/custom-cred",
        "visits" => {
                                          "country_name" => "UK",
                           "iso_two_letter_country_code" => "UK",
                                               "referer" => "http://localhost:3000/cfazzini/songs/custom-cred",
                                                "minute" => 251,
                                              "token_id" => "134318948211lzyqexgo"
        }
    },
    [1] {
           "_id" => "20120725/foobar/song/custom-cred",
        "visits" => {
                                          "country_name" => "UK",
                           "iso_two_letter_country_code" => "UK",
                                               "referer" => "http://localhost:3000/cfazzini/songs/custom-cred",
                                                "minute" => 1118,
                                              "token_id" => "134324148411hsrxvakn"
        }
    },
    [2] {
           "_id" => "20120725/foobar/song/test-pg3-long-title-here-test-lorem-ipsum-dolor-lo",
        "visits" => {
                                          "country_name" => "UK",
                           "iso_two_letter_country_code" => "UK",
                                               "referer" => "http://localhost:3000/",
                                                "minute" => 1121,
                                              "token_id" => "13432416893tlfsmmgh"
        }
    },
    [3] {
           "_id" => "20120725/foobar/song/custom-cred",
        "visits" => {
                                          "country_name" => "UK",
                           "iso_two_letter_country_code" => "UK",
                                               "referer" => "http://localhost:3000/",
                                                "minute" => 1121,
                                              "token_id" => "134324169011hmtkxrgt"
        }
    }
]

conn次に、とを定義せずに、Railsモデルを使用して同じコマンドを実行するにはどうすればよいdbですか?

4

1 に答える 1

2

1) $push演算子を使用する必要があります-次のようなものです。

cmd = {
  aggregate: 'live_daily_stats',
  pipeline: [
    { '$project' => {
        :visits => 1,
      }
    },
    { '$unwind' => '$visits' },
    { '$match' => { 'visits.minute' => { '$gt' => 224 } } },
    { '$sort' => { 'visits.minute' => 1 } },
    { '$group' => { :_id => '$_id', 
                    :visits => { '$push' => '$visits' }},
    }
  ]
}

2)次のように接続を取得できます:Mongoid.database.connectiondbと接続を定義する必要はありません。アグリゲートヘルパーは間もなく登場します-現在進行中です。このチケットに従ってください:https ://jira.mongodb.org/browse/RUBY-455

于 2012-07-25T19:58:14.100 に答える