Mongoid::Sample

Brings the API of Ruby's Array#sample to Mongoid collections

Installation

Add this line to your application's Gemfile:

gem 'mongoid-sample'

And then execute:

$ bundle

Or install it yourself as:

$ gem install mongoid-sample

And require:

require 'mongoid/sample'

Usage

Sample a single document

require 'mongoid/sample'

class MyModel
  include Mongoid::Document
  field :name
end

puts MyModel.sample.inspect # => nil
5.times { MyModel.create(name: 'Foo') }
puts MyModel.sample.inspect # => #<MyModel _id: 57954c1002182308d7000000, name: "Foo">

Sample multiple documents

require 'mongoid/sample'

class MyModel
  include Mongoid::Document
  field :name
end

puts MyModel.sample(3).inspect # => []
5.times { MyModel.create(name: 'Foo') }
puts MyModel.sample(3).inspect # => [#<MyModel _id: 57954c6f02182308d7000008, name: "Foo">, #<MyModel _id: 57954c6f02182308d700000a, name: "Foo">, #<MyModel _id: 57954c6f02182308d7000009, name: "Foo">]

Sample from scope

require 'mongoid/sample'

class MyModel
  include Mongoid::Document
  field :name
end

puts MyModel.where(name: 'Foo').sample(3).inspect # => []
5.times { MyModel.create(name: 'Foo') }
5.times { MyModel.create(name: 'Bar') }
puts MyModel.sample(3).inspect # => [#<MyModel _id: 57954c6f02182308d7000007, name: "Foo">, #<MyModel _id: 57954c6f02182308d7000008, name: "Foo">, #<MyModel _id: 57954ca702182308d700000e, name: "Bar">]
puts MyModel.where(name: 'Foo').sample(3).inspect # => [#<MyModel _id: 57954c6f02182308d7000008, name: "Foo">, #<MyModel _id: 57954c6f02182308d7000009, name: "Foo">, #<MyModel _id: 57954c6f02182308d7000006, name: "Foo">]