1

私は12より大きいでを返そうvisitsとしています。minute

私のデータ構造は次のようになります。

{ "_id" : "20120723/foobar/song/custom-cred",
  "live_daily_count" : 4,
  "metacontent" : { "date" : "20120723",
    "live_daily_statable_slug" : "custom-cred",
    "live_daily_statable_title" : "custom cred",
    "live_daily_statable_type" : "Song",
    "url" : "foobar/songs/custom-cred",
    "user_slug" : "foobar" },
  "visits" : [
    { "country_name" : "UK",
      "iso_two_letter_country_code" : "UK",
      "referer" : "http://localhost:3000/foobar/songs/no-title-with-space",
      "minute" : 12,
      "token_id" : "134300236111rcbmbmvv" },
    { "country_name" : "UK",
      "iso_two_letter_country_code" : "UK",
      "referer" : "http://localhost:3000/foobar/songs/no-title-with-space",
      "minute" : 13,
      "token_id" : "134300242111pjvkjjkf" },
    { "country_name" : "UK",
      "iso_two_letter_country_code" : "UK",
      "referer" : "http://localhost:3000/foobar/songs/no-title-with-space",
      "minute" : 13,
      "token_id" : "134300243511udbnqldm" }
  ]
}

MongodbRubyドライバーを使用しています。私は次のことを試しました:

conn = Mongo::Connection.new
db   = conn['foobar_development']
cmd = {
  aggregate: 'live_daily_stats',
  pipeline: [
    { '$match' => { :_id => "20120723/foobar/song/custom-cred" } },
    { '$project' => {
      :visits => 1,
    } },
    { '$unwind' => '$visits' },
    # { '$group' => {
    #   :_id => '$_id'
    # } },
  ]
}

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

現在は次のようになります。

[
    [0] {
           "_id" => "20120723/foobar/song/custom-cred",
        "visits" => {
                                          "country_name" => "UK",
                           "iso_two_letter_country_code" => "UK",
                                               "referer" => "http://localhost:3000/foobar/songs/custom-cred",
                                                "minute" => 12,
                                              "token_id" => "134300236111rcbmbmvv"
        }
    },
    [1] {
           "_id" => "20120723/foobar/song/custom-cred",
        "visits" => {
                                          "country_name" => "UK",
                           "iso_two_letter_country_code" => "UK",
                                        "follower_class" => "non_follower",
                                               "referer" => "http://localhost:3000/foobar/songs/custom-cred",
                                                "minute" => 13,
                                              "token_id" => "134300242111pjvkjjkf"
        }
    },
    [2] {
           "_id" => "20120723/foobar/song/custom-cred",
        "visits" => {
                                          "country_name" => "UK",
                           "iso_two_letter_country_code" => "UK",
                                        "follower_class" => "non_follower",
                                               "referer" => "http://localhost:3000/foobar/songs/custom-cred",
                                                "minute" => 13,
                                              "token_id" => "134300243511udbnqldm"
        }
    }
]

結果が12より大きいのみvisitsを返すようにするにはどうすればよいですか?minuteどんな助けでもいただければ幸いです。

4

1 に答える 1

3

最初に使用する $match パイプライン要素は、$unwind ステップの後を含め、複数回使用できます。

$unwind が Visits 配列要素をそれぞれ独自のドキュメントに分割したら、パイプラインの最後に {$match:{"visits.minute":{$gt:12}}} を追加できます。これにより、必要な訪問のみが残されます。

于 2012-07-25T06:46:26.980 に答える