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
@return [ Collection ] The
Collection
to query.
@return [ Hash ] The query filter.
@return [ Hash ] The query filter.
Public Class Methods
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.
@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.
@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 138 def initialize(collection, filter = {}, options = {}) validate_doc!(filter) @collection = collection parse_parameters!(BSON::Document.new(filter), BSON::Document.new(options)) end
Public Instance Methods
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 80 def ==(other) return false unless other.is_a?(View) collection == other.collection && filter == other.filter && options == other.options end
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 97 def hash [ collection.namespace, options.hash, filter.hash ].hash end
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 152 def inspect "#<Mongo::Collection::View:0x#{object_id} namespace='#{collection.namespace}'" + " @filter=#{filter.to_s} @options=#{options.to_s}>" end
Private Instance Methods
# File lib/mongo/collection/view.rb, line 163 def initialize_copy(other) @collection = other.collection @options = other.options.dup @filter = other.filter.dup end
# File lib/mongo/collection/view.rb, line 176 def new(options) View.new(collection, filter, options) end
# File lib/mongo/collection/view.rb, line 169 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
# File lib/mongo/collection/view.rb, line 180 def validate_collation!(server, opts) if (opts[:collation] || opts[Operation::COLLATION]) && !server.features.collation_enabled? raise Error::UnsupportedCollation.new end end
# File lib/mongo/collection/view.rb, line 186 def view; self; end
# File lib/mongo/collection/view.rb, line 159 def write_concern WriteConcern.get(options[:write] || options[:write_concern] || collection.write_concern) end