Thin layer over the ruby driver that allows you to quickly grab hold of your data (pluck it!).
gem install plucky
connection = Mongo::MongoClient.new
db = connection.db('test')
collection = db['users']
collection.remove # clear out the collection
collection.insert_one({'_id' => 'chris', 'age' => 26, 'name' => 'Chris'})
collection.insert_one({'_id' => 'steve', 'age' => 29, 'name' => 'Steve'})
collection.insert_one({'_id' => 'john', 'age' => 28, 'name' => 'John'})
# initialize query with collection
query = Plucky::Query.new(collection)
puts 'Querying'
pp query.where(:name => 'John').first
pp query.first(:name => 'John')
pp query.where(:name => 'John').all
pp query.all(:name => 'John')
puts 'Find by _id'
pp query.find('chris')
pp query.find('chris', 'steve')
pp query.find(['chris', 'steve'])
puts 'Sort'
pp query.sort(:age).all
pp query.sort(:age.asc).all # same as above
pp query.sort(:age.desc).all
pp query.sort(:age).last # steve
puts 'Counting'
pp query.count # 3
pp query.size # 3
pp query.count(:name => 'John') # 1
pp query.where(:name => 'John').count # 1
pp query.where(:name => 'John').size # 1
puts 'Distinct'
pp query.distinct(:age) # [26, 29, 28]
puts 'Select only certain fields'
pp query.fields(:age).find('chris') # {"_id"=>"chris", "age"=>26}
pp query.only(:age).find('chris') # {"_id"=>"chris", "age"=>26}
pp query.ignore(:name).find('chris') # {"_id"=>"chris", "age"=>26}
puts 'Pagination, yeah we got that'
pp query.sort(:age).paginate(:per_page => 1, :page => 2)
pp query.sort(:age).per_page(1).paginate(:page => 2)
pp query.sort(:age).limit(2).to_a # [chris, john]
pp query.sort(:age).skip(1).limit(2).to_a # [john, steve]
pp query.sort(:age).offset(1).limit(2).to_a # [john, steve]
puts 'Using a cursor'
cursor = query.find_each(:sort => :age) do |doc|
pp doc
end
pp cursor
puts 'Symbol Operators'
pp query.where(:age.gt => 28).count # 1 (steve)
pp query.where(:age.lt => 28).count # 1 (chris)
pp query.where(:age.in => [26, 28]).to_a # [chris, john]
pp query.where(:age.nin => [26, 28]).to_a # [steve]
puts 'Removing'
query.remove(:name => 'John')
pp query.count # 2
query.where(:name => 'Chris').remove
pp query.count # 1
query.remove
pp query.count # 0
https://groups.google.com/forum/#!forum/mongomapper
- Fork the project.
- Make your feature addition or bug fix.
- Add tests for it. This is important so I don't break it in a future version unintentionally.
- Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
- Send me a pull request. Bonus points for topic branches.
Copyright (c) 2010 John Nunemaker. See LICENSE for details.