Class: XGen::Mongo::Driver::Collection

Inherits:
Object
  • Object
show all
Defined in:
lib/mongo/collection.rb

Overview

A named collection of records in a database.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(db, name) ⇒ Collection

Returns a new instance of Collection.



28
29
30
31
# File 'lib/mongo/collection.rb', line 28

def initialize(db, name)
  @db, @name = db, name
  @hint = nil
end

Instance Attribute Details

#dbObject (readonly)

Returns the value of attribute db.



26
27
28
# File 'lib/mongo/collection.rb', line 26

def db
  @db
end

#hintObject

Returns the value of attribute hint.



26
27
28
# File 'lib/mongo/collection.rb', line 26

def hint
  @hint
end

#nameObject (readonly)

Returns the value of attribute name.



26
27
28
# File 'lib/mongo/collection.rb', line 26

def name
  @name
end

Instance Method Details

#clearObject

Remove all records.



93
94
95
# File 'lib/mongo/collection.rb', line 93

def clear
  remove({})
end

#count(selector = {}) ⇒ Object

Return the number of records that match selector. If selector is nil or an empty hash, returns the count of all records.



163
164
165
# File 'lib/mongo/collection.rb', line 163

def count(selector={})
  @db.count(@name, selector || {})
end

#create_index(field_or_spec, unique = false) ⇒ Object

Create a new index. field_or_spec should be either a single field name or a Array of [field name, direction] pairs. Directions should be specified as XGen::Mongo::ASCENDING or XGen::Mongo::DESCENDING. unique is an optional boolean indicating whether this index should enforce a uniqueness constraint.



122
123
124
# File 'lib/mongo/collection.rb', line 122

def create_index(field_or_spec, unique=false)
  @db.create_index(@name, field_or_spec, unique)
end

#dropObject

Drop the entire collection. USE WITH CAUTION.



138
139
140
# File 'lib/mongo/collection.rb', line 138

def drop
  @db.drop_collection(@name)
end

#drop_index(name) ⇒ Object

Drop index name.



127
128
129
# File 'lib/mongo/collection.rb', line 127

def drop_index(name)
  @db.drop_index(@name, name)
end

#drop_indexesObject

Drop all indexes.



132
133
134
135
# File 'lib/mongo/collection.rb', line 132

def drop_indexes
  # just need to call drop indexes with no args; will drop them all
  @db.drop_index(@name, '*')
end

#find(selector = {}, options = {}) ⇒ Object

Return records that match a selector hash. See Mongo docs for details.

Options:

:fields

Array of collection field names; only those will be returned (plus _id if defined)

:offset

Start at this record when returning records

:limit

Maximum number of records to return

:sort

Either hash of field names as keys and 1/-1 as values; 1 == ascending, -1 == descending, or array of field names (all assumed to be sorted in ascending order).

:hint

See #hint. This option overrides the collection-wide value.

Raises:

  • (RuntimeError)


52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/mongo/collection.rb', line 52

def find(selector={}, options={})
  fields = options.delete(:fields)
  fields = nil if fields && fields.empty?
  offset = options.delete(:offset) || 0
  limit = options.delete(:limit) || 0
  sort = options.delete(:sort)
  hint = options.delete(:hint)
  if hint
    hint = normalize_hint_fields(hint)
  else
    hint = @hint        # assumed to be normalized already
  end
  raise RuntimeError, "Unknown options [#{options.inspect}]" unless options.empty?
  @db.query(self, Query.new(selector, fields, offset, limit, sort, hint))
end

#find_first(selector = {}, options = {}) ⇒ Object

Find the first record that matches selector. See #find.



69
70
71
72
73
74
# File 'lib/mongo/collection.rb', line 69

def find_first(selector={}, options={})
  h = options.dup
  h[:limit] = 1
  cursor = find(selector, h)
  cursor.next_object    # don't need to explicitly close b/c of limit
end

#index_informationObject

Return an array of hashes, one for each index. Each hash contains:

:name

Index name

:keys

Hash whose keys are the names of the fields that make up the key and values are integers.

:ns

Namespace; same as this collection’s name.



150
151
152
# File 'lib/mongo/collection.rb', line 150

def index_information
  @db.index_information(@name)
end

#insert(*objects) ⇒ Object Also known as: <<

Insert objects, which are hashes. “<<” is aliased to this method. Returns either the single inserted object or a new array containing objects. The object(s) may have been modified by the database’s PK factory, if it has one.



80
81
82
83
84
# File 'lib/mongo/collection.rb', line 80

def insert(*objects)
  objects = objects.first if objects.size == 1 && objects.first.is_a?(Array)
  res = @db.insert_into_db(@name, objects)
  res.size > 1 ? res : res.first
end

#modify(selector, modifier_obj) ⇒ Object

Update records that match selector by applying obj as an update. Both selector and modifier_obj are required.



110
111
112
113
114
# File 'lib/mongo/collection.rb', line 110

def modify(selector, modifier_obj)
  raise "no object" unless modifier_obj
  raise "no selector" unless selector
  @db.modify_in_db(@name, selector, modifier_obj)
end

#optionsObject

Return a hash containing options that apply to this collection. ‘create’ will be the collection name. For the other possible keys and values, see DB#create_collection.



157
158
159
# File 'lib/mongo/collection.rb', line 157

def options
  @db.collections_info(@name).next_object()['options']
end

#remove(selector = {}) ⇒ Object

Remove the records that match selector.



88
89
90
# File 'lib/mongo/collection.rb', line 88

def remove(selector={})
  @db.remove_from_db(@name, selector)
end

#replace(selector, obj) ⇒ Object

Update records that match selector by applying obj as an update.



104
105
106
# File 'lib/mongo/collection.rb', line 104

def replace(selector, obj)
  @db.replace_in_db(@name, selector, obj)
end

#repsert(selector, obj) ⇒ Object

Update records that match selector by applying obj as an update. If no match, inserts (???).



99
100
101
# File 'lib/mongo/collection.rb', line 99

def repsert(selector, obj)
  @db.repsert_in_db(@name, selector, obj)
end