class Mongo::Collection::View

Representation of a query and options producing a result set of documents.

A View can be modified using helpers. Helpers can be chained, as each one returns a View if arguments are provided.

The query message is sent to the server when a “terminator” is called. For example, when each is called on a View, a Cursor object is created, which then sends the query to the server.

A View is not created directly by a user. Rather, View creates a View when a CRUD operation is called and returns it to the user to interact with.

@note The View API is semipublic. @api semipublic

Attributes

collection[R]

@return [ Collection ] The Collection to query.

filter[R]

@return [ Hash ] The query filter.

selector[R]

@return [ Hash ] The query filter.

Public Class Methods

new(collection, filter = {}, options = {}) click to toggle source

Creates a new View.

@example Find all users named Emily.

View.new(collection, {:name => 'Emily'})

@example Find all users named Emily skipping 5 and returning 10.

View.new(collection, {:name => 'Emily'}, :skip => 5, :limit => 10)

@example Find all users named Emily using a specific read preference.

View.new(collection, {:name => 'Emily'}, :read => :secondary_preferred)

@param [ Collection ] collection The Collection to query. @param [ Hash ] filter The query filter. @param [ Hash ] options The additional query options.

@option options :comment [ String ] Associate a comment with the query. @option options :batch_size [ Integer ] The number of docs to return in

each response from MongoDB.

@option options :fields [ Hash ] The fields to include or exclude in

returned docs.

@option options :hint [ Hash ] Override default index selection and force

MongoDB to use a specific index for the query.

@option options :limit [ Integer ] Max number of docs to return. @option options :max_scan [ Integer ] Constrain the query to only scan the

specified number of docs. Use to prevent queries from running too long.
Deprecated as of MongoDB server version 4.0.

@option options :read [ Symbol ] The read preference to use for the query.

If none is provided, the collection's default read preference is used.

@option options :show_disk_loc [ true, false ] Return disk location info as

a field in each doc.

@option options :skip [ Integer ] The number of documents to skip. @option options :snapshot [ true, false ] Prevents returning a doc more than

once. Deprecated as of MongoDB server version 4.0.

@option options :sort [ Hash ] The key and direction pairs used to sort the

results.

@option options [ Hash ] :collation The collation to use.

@since 2.0.0

# File lib/mongo/collection/view.rb, line 142
def initialize(collection, filter = {}, options = {})
  validate_doc!(filter)
  @collection = collection
  parse_parameters!(BSON::Document.new(filter), BSON::Document.new(options))
end

Public Instance Methods

==(other) click to toggle source

Compare two View objects.

@example Compare the view with another object.

view == other

@return [ true, false ] Equal if collection, filter, and options of two

+View+ match.

@since 2.0.0

# File lib/mongo/collection/view.rb, line 83
def ==(other)
  return false unless other.is_a?(View)
  collection == other.collection &&
      filter == other.filter &&
      options == other.options
end
Also aliased as: eql?
eql?(other)
Alias for: ==
hash() click to toggle source

A hash value for the View composed of the collection namespace, hash of the options and hash of the filter.

@example Get the hash value.

view.hash

@return [ Integer ] A hash value of the View object.

@since 2.0.0

# File lib/mongo/collection/view.rb, line 100
def hash
  [ collection.namespace, options.hash, filter.hash ].hash
end
inspect() click to toggle source

Get a human-readable string representation of View.

@example Get the inspection.

view.inspect

@return [ String ] A string representation of a View instance.

@since 2.0.0

# File lib/mongo/collection/view.rb, line 156
def inspect
  "#<Mongo::Collection::View:0x#{object_id} namespace='#{collection.namespace}'" +
      " @filter=#{filter.to_s} @options=#{options.to_s}>"
end
write_concern() click to toggle source

Get the write concern on this View.

@example Get the write concern.

view.write_concern

@return [ Mongo::WriteConcern ] The write concern.

@since 2.0.0

# File lib/mongo/collection/view.rb, line 169
def write_concern
  WriteConcern.get(options[:write_concern] || options[:write] || collection.write_concern)
end

Private Instance Methods

apply_collation!(doc, server, opts = {}) click to toggle source
# File lib/mongo/collection/view.rb, line 192
def apply_collation!(doc, server, opts = {})
  if coll = doc[:collation] || opts[:collation] || opts['collation'] || collation
    validate_collation!(server, coll)
    doc[:collation] = coll
  end
end
initialize_copy(other) click to toggle source
# File lib/mongo/collection/view.rb, line 175
def initialize_copy(other)
  @collection = other.collection
  @options = other.options.dup
  @filter = other.filter.dup
end
new(options) click to toggle source
# File lib/mongo/collection/view.rb, line 188
def new(options)
  View.new(collection, filter, options)
end
parse_parameters!(filter, options) click to toggle source
# File lib/mongo/collection/view.rb, line 181
def parse_parameters!(filter, options)
  query = filter.delete(QUERY)
  modifiers = (filter || {}).merge(options.delete(MODIFIERS) || {})
  @filter = (query || filter).freeze
  @options = Builder::Modifiers.map_driver_options(modifiers).merge!(options).freeze
end
validate_collation!(server, coll) click to toggle source
# File lib/mongo/collection/view.rb, line 199
def validate_collation!(server, coll)
  if coll &&!server.features.collation_enabled?
    raise Error::UnsupportedCollation.new
  end
end
view() click to toggle source
# File lib/mongo/collection/view.rb, line 205
def view; self; end
with_session(opts = {}, &block) click to toggle source
# File lib/mongo/collection/view.rb, line 207
def with_session(opts = {}, &block)
  client.send(:with_session, @options.merge(opts), &block)
end