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. 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
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
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
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
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
# 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
# File lib/mongo/collection/view.rb, line 175 def initialize_copy(other) @collection = other.collection @options = other.options.dup @filter = other.filter.dup end
# File lib/mongo/collection/view.rb, line 188 def new(options) View.new(collection, filter, options) end
# 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
# 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
# File lib/mongo/collection/view.rb, line 205 def view; self; end
# File lib/mongo/collection/view.rb, line 207 def with_session(opts = {}, &block) client.send(:with_session, @options.merge(opts), &block) end