A basic match query

MongoMatch is used with most of the Mongo services like find, find_all, remove etc.

Building a query can be done with the fluent interface:

var query = (new MongoMatch).
    eq("login", "Morriar").
    gt("age", 18).
    exists("email", true).
    is_in("status", [1, 2, 3, 4])

Fore more help on how to use the query operators of MongoDB please refer to the official MongoDB documentation: https://docs.mongodb.com/manual/reference/operator/query/

Introduced properties

fun all(field: nullable String, values: Array[Serializable]): MongoMatch

mongodb :: MongoMatch :: all

Array contains all
fun elem_match(field: nullable String, query: Serializable): MongoMatch

mongodb :: MongoMatch :: elem_match

Array element match
fun eq(field: String, value: nullable Serializable): MongoMatch

mongodb :: MongoMatch :: eq

Match documents where field equals value
fun exists(field: String, exists: Bool): MongoMatch

mongodb :: MongoMatch :: exists

Match documents where field exists or not
fun gt(field: String, value: nullable Serializable): MongoMatch

mongodb :: MongoMatch :: gt

Match documents where field is greater than value
fun gte(field: String, value: nullable Serializable): MongoMatch

mongodb :: MongoMatch :: gte

Match documents where field is greater or equal to value
fun is_in(field: String, values: Array[nullable Serializable]): MongoMatch

mongodb :: MongoMatch :: is_in

Match documents where field is in values
fun is_nin(field: String, values: Array[nullable Serializable]): MongoMatch

mongodb :: MongoMatch :: is_nin

Match documents where field is not in values
fun land(field: nullable String, expressions: Array[Serializable]): MongoMatch

mongodb :: MongoMatch :: land

Logical and
fun lnor(field: nullable String, expressions: Array[Serializable]): MongoMatch

mongodb :: MongoMatch :: lnor

Logical nor
fun lnot(field: nullable String, expression: Serializable): MongoMatch

mongodb :: MongoMatch :: lnot

Logical not
fun lor(field: nullable String, expressions: Array[Serializable]): MongoMatch

mongodb :: MongoMatch :: lor

Logical or
fun lt(field: String, value: nullable Serializable): MongoMatch

mongodb :: MongoMatch :: lt

Match documents where field is less than value
fun lte(field: String, value: nullable Serializable): MongoMatch

mongodb :: MongoMatch :: lte

Match documents where field is less or equal to value
fun ne(field: String, value: nullable Serializable): MongoMatch

mongodb :: MongoMatch :: ne

Match documents where field not equals value
fun op(name: String, field: nullable String, value: nullable Serializable): MongoMatch

mongodb :: MongoMatch :: op

Define a custom operaton for field
fun regex(field: String, pattern: String, options: nullable String): MongoMatch

mongodb :: MongoMatch :: regex

Match documents where field matches pattern
fun size(field: nullable String, size: Int): MongoMatch

mongodb :: MongoMatch :: size

Array size match

Redefined properties

redef type SELF: MongoMatch

mongodb $ MongoMatch :: SELF

Type of this instance, automatically specialized in every class

All properties

fun !=(other: nullable Object): Bool

core :: Object :: !=

Have self and other different values?
fun ==(other: nullable Object): Bool

core :: Object :: ==

Have self and other the same value?
type CLASS: Class[SELF]

core :: Object :: CLASS

The type of the class of self.
type SELF: Object

core :: Object :: SELF

Type of this instance, automatically specialized in every class
abstract fun [](key: nullable Object): V

core :: MapRead :: []

Get the item at key
abstract fun []=(key: K, value: V)

core :: Map :: []=

Set the value at key.
protected fun accept_json_serializer(v: JsonSerializer)

serialization :: Serializable :: accept_json_serializer

Refinable service to customize the serialization of this class to JSON
protected fun accept_msgpack_attribute_counter(v: AttributeCounter)

serialization :: Serializable :: accept_msgpack_attribute_counter

Hook to customize the behavior of the AttributeCounter
protected fun accept_msgpack_serializer(v: MsgPackSerializer)

serialization :: Serializable :: accept_msgpack_serializer

Hook to customize the serialization of this class to MessagePack
fun add_all(map: MapRead[K, V])

core :: Map :: add_all

Add each (key,value) of map into self.
protected fun add_to_bundle(bundle: NativeBundle, key: JavaString)

serialization :: Serializable :: add_to_bundle

Called by []= to dynamically choose the appropriate method according
fun all(field: nullable String, values: Array[Serializable]): MongoMatch

mongodb :: MongoMatch :: all

Array contains all
protected fun class_factory(name: String): CLASS

core :: Object :: class_factory

Implementation used by get_class to create the specific class.
fun class_name: String

core :: Object :: class_name

The class name of the object.
abstract fun clear

core :: Map :: clear

Remove all items
fun core_serialize_to(serializer: Serializer)

serialization :: Serializable :: core_serialize_to

Actual serialization of self to serializer
fun elem_match(field: nullable String, query: Serializable): MongoMatch

mongodb :: MongoMatch :: elem_match

Array element match
fun eq(field: String, value: nullable Serializable): MongoMatch

mongodb :: MongoMatch :: eq

Match documents where field equals value
fun exists(field: String, exists: Bool): MongoMatch

mongodb :: MongoMatch :: exists

Match documents where field exists or not
fun filter_keys(keys: Collection[nullable Object]): Array[K]

core :: MapRead :: filter_keys

Return all elements of keys that have a value.
init from(coll: Map[K, V])

core :: HashMap :: from

Build a list filled with the items of coll.
init from_deserializer(deserializer: Deserializer)

serialization :: Serializable :: from_deserializer

Create an instance of this class from the deserializer
fun get_class: CLASS

core :: Object :: get_class

The meta-object representing the dynamic type of self.
fun get_or_default(key: nullable Object, default: V): V

core :: MapRead :: get_or_default

Get the item at key or return default if not in map
fun get_or_null(key: nullable Object): nullable V

core :: MapRead :: get_or_null

Get the item at key or null if key is not in the map.
fun gt(field: String, value: nullable Serializable): MongoMatch

mongodb :: MongoMatch :: gt

Match documents where field is greater than value
fun gte(field: String, value: nullable Serializable): MongoMatch

mongodb :: MongoMatch :: gte

Match documents where field is greater or equal to value
fun has_key(key: nullable Object): Bool

core :: MapRead :: has_key

Is there an item associated with key?
fun hash: Int

core :: Object :: hash

The hash code of the object.
init init

core :: Object :: init

fun inspect: String

core :: Object :: inspect

Developer readable representation of self.
protected fun inspect_head: String

core :: Object :: inspect_head

Return "CLASSNAME:#OBJECTID".
abstract fun is_empty: Bool

core :: MapRead :: is_empty

Is there no item in the collection?
fun is_in(field: String, values: Array[nullable Serializable]): MongoMatch

mongodb :: MongoMatch :: is_in

Match documents where field is in values
fun is_nin(field: String, values: Array[nullable Serializable]): MongoMatch

mongodb :: MongoMatch :: is_nin

Match documents where field is not in values
intern fun is_same_instance(other: nullable Object): Bool

core :: Object :: is_same_instance

Return true if self and other are the same instance (i.e. same identity).
fun is_same_serialized(other: nullable Object): Bool

core :: Object :: is_same_serialized

Is self the same as other in a serialization context?
intern fun is_same_type(other: Object): Bool

core :: Object :: is_same_type

Return true if self and other have the same dynamic type.
abstract fun iterator: MapIterator[K, V]

core :: MapRead :: iterator

Get a new iterator on the map.
abstract fun join(sep: String, couple_sep: String): String

core :: Map :: join

Concatenate couples of key value.
abstract fun keys: Collection[K]

core :: MapRead :: keys

Return the point of view of self on the keys only.
protected fun keys=(keys: RemovableCollection[K])

core :: HashMap :: keys=

fun keys_sorted_by_values(comparator: Comparator): Array[K]

core :: MapRead :: keys_sorted_by_values

Return an array of all keys sorted with their values using comparator.
fun land(field: nullable String, expressions: Array[Serializable]): MongoMatch

mongodb :: MongoMatch :: land

Logical and
abstract fun length: Int

core :: MapRead :: length

Number of items in the collection.
fun lnor(field: nullable String, expressions: Array[Serializable]): MongoMatch

mongodb :: MongoMatch :: lnor

Logical nor
fun lnot(field: nullable String, expression: Serializable): MongoMatch

mongodb :: MongoMatch :: lnot

Logical not
fun lookup_all_values(pe: POSetElement[K]): Set[V]

core :: MapRead :: lookup_all_values

Search all the values in pe.greaters.
fun lookup_values(pe: POSetElement[K]): Set[V]

core :: MapRead :: lookup_values

Combine the values in pe.greaters from the most smaller elements that have a value.
fun lor(field: nullable String, expressions: Array[Serializable]): MongoMatch

mongodb :: MongoMatch :: lor

Logical or
fun lt(field: String, value: nullable Serializable): MongoMatch

mongodb :: MongoMatch :: lt

Match documents where field is less than value
fun lte(field: String, value: nullable Serializable): MongoMatch

mongodb :: MongoMatch :: lte

Match documents where field is less or equal to value
protected fun msgpack_extra_array_items: Int

serialization :: Serializable :: msgpack_extra_array_items

Hook to request a larger than usual metadata array
fun ne(field: String, value: nullable Serializable): MongoMatch

mongodb :: MongoMatch :: ne

Match documents where field not equals value
init new: Map[K, V]

core :: Map :: new

Get a HashMap[K, V] as default implementation
fun not_empty: Bool

core :: MapRead :: not_empty

Alias for not is_empty.
intern fun object_id: Int

core :: Object :: object_id

An internal hash code for the object based on its identity.
fun op(name: String, field: nullable String, value: nullable Serializable): MongoMatch

mongodb :: MongoMatch :: op

Define a custom operaton for field
fun output

core :: Object :: output

Display self on stdout (debug only).
intern fun output_class_name

core :: Object :: output_class_name

Display class name on stdout (debug only).
protected fun provide_default_value(key: nullable Object): V

core :: MapRead :: provide_default_value

Called by the underling implementation of [] to provide a default value when a key has no value
fun recover_with(map: MapRead[K, V])

core :: Map :: recover_with

Alias for add_all
fun regex(field: String, pattern: String, options: nullable String): MongoMatch

mongodb :: MongoMatch :: regex

Match documents where field matches pattern
fun serialization_hash: Int

core :: Object :: serialization_hash

Hash value use for serialization
fun serialize_msgpack(plain: nullable Bool): Bytes

serialization :: Serializable :: serialize_msgpack

Serialize self to MessagePack bytes
fun serialize_to(serializer: Serializer)

serialization :: Serializable :: serialize_to

Serialize self to serializer
fun serialize_to_json(plain: nullable Bool, pretty: nullable Bool): String

serialization :: Serializable :: serialize_to_json

Serialize self to JSON
fun size(field: nullable String, size: Int): MongoMatch

mongodb :: MongoMatch :: size

Array size match
intern fun sys: Sys

core :: Object :: sys

Return the global sys object, the only instance of the Sys class.
fun to_json: String

serialization :: Serializable :: to_json

Serialize self to plain JSON
abstract fun to_jvalue(env: JniEnv): JValue

core :: Object :: to_jvalue

fun to_map_comparator(comparator: Comparator): MapComparator[K, V]

core :: MapRead :: to_map_comparator

A comparator that compares things with their values in self.
fun to_pretty_json: String

serialization :: Serializable :: to_pretty_json

Serialize self to plain pretty JSON
fun to_s: String

core :: Object :: to_s

User readable representation of self.
abstract fun values: Collection[V]

core :: MapRead :: values

Return the point of view of self on the values only.
protected fun values=(values: RemovableCollection[V])

core :: HashMap :: values=

fun values_sorted_by_key(comparator: Comparator): Array[V]

core :: MapRead :: values_sorted_by_key

Return an array of all values sorted with their keys using comparator.
package_diagram mongodb::MongoMatch MongoMatch json::JsonObject JsonObject mongodb::MongoMatch->json::JsonObject json::JsonMapRead JsonMapRead json::JsonObject->json::JsonMapRead core::HashMap HashMap json::JsonObject->core::HashMap popcorn::RepositoryQuery RepositoryQuery json::JsonObject->popcorn::RepositoryQuery ...json::JsonMapRead ... ...json::JsonMapRead->json::JsonMapRead ...core::HashMap ... ...core::HashMap->core::HashMap ...popcorn::RepositoryQuery ... ...popcorn::RepositoryQuery->popcorn::RepositoryQuery

Ancestors

class HashMap[K: nullable Object, V: nullable Object]

core :: HashMap

A Map implemented with a hash table.
interface JsonMapRead[K: String, V: nullable Serializable]

json :: JsonMapRead

A map that can be translated into a JSON object.
interface Map[K: nullable Object, V: nullable Object]

core :: Map

Maps are associative collections: key -> item.
interface MapRead[K: nullable Object, V: nullable Object]

core :: MapRead

MapRead are abstract associative collections: key -> item.
interface Object

core :: Object

The root of the class hierarchy.
interface RepositoryQuery

popcorn :: RepositoryQuery

An abstract Query representation.
interface Serializable

serialization :: Serializable

Instances of this class can be passed to Serializer::serialize

Parents

class JsonObject

json :: JsonObject

A JSON Object.

Class definitions

mongodb $ MongoMatch
# A basic match query
#
# `MongoMatch` is used with most of the Mongo services like `find`, `find_all`,
# `remove` etc.
#
# Building a query can be done with the fluent interface:
#
# ~~~
# var query = (new MongoMatch).
#	eq("login", "Morriar").
#	gt("age", 18).
#	exists("email", true).
#	is_in("status", [1, 2, 3, 4])
# ~~~
#
# Fore more help on how to use the query operators of MongoDB please
# refer to the official MongoDB documentation:
# https://docs.mongodb.com/manual/reference/operator/query/
class MongoMatch
	super JsonObject

	# Define a custom operaton for `field`
	#
	# If no `field` is specified, append the operator the the root object:
	# ~~~json
	# {$<name>: <value>}
	# ~~~
	#
	# Else, append the operator to the field:
	# ~~~json
	# {field: {$<name>: <value>} }
	# ~~~
	fun op(name: String, field: nullable String, value: nullable Serializable): MongoMatch do
		if field != null then
			var q = new JsonObject
			q["${name}"] = value
			self[field] = q
		else
			self["${name}"] = value
		end
		return self
	end

	# Match documents where `field` equals `value`
	#
	# https://docs.mongodb.com/manual/reference/operator/query/eq/#op._S_eq
	#
	# ~~~json
	# {field: {$eq: value} }
	# ~~~
	fun eq(field: String, value: nullable Serializable): MongoMatch do
		self[field] = value
		return self
	end

	# Match documents where `field` not equals `value`
	#
	# https://docs.mongodb.com/manual/reference/operator/query/ne/#op._S_ne
	#
	# ~~~json
	# {field: {$ne: value} }
	# ~~~
	fun ne(field: String, value: nullable Serializable): MongoMatch do
		op("ne", field, value)
		return self
	end

	# Match documents where `field` is greater than `value`
	#
	# https://docs.mongodb.com/manual/reference/operator/query/gt/#op._S_gt
	#
	# ~~~json
	# {field: {$gt: value} }
	# ~~~
	fun gt(field: String, value: nullable Serializable): MongoMatch do
		op("gt", field, value)
		return self
	end

	# Match documents where `field` is greater or equal to `value`
	#
	# https://docs.mongodb.com/manual/reference/operator/query/gte/#op._S_gte
	#
	# ~~~json
	# {field: {$gte: value} }
	# ~~~
	fun gte(field: String, value: nullable Serializable): MongoMatch do
		op("gte", field, value)
		return self
	end

	# Match documents where `field` is less than `value`
	#
	# https://docs.mongodb.com/manual/reference/operator/query/lt/#op._S_lt
	#
	# ~~~json
	# {field: {$lt: value} }
	# ~~~
	fun lt(field: String, value: nullable Serializable): MongoMatch do
		op("lt", field, value)
		return self
	end

	# Match documents where `field` is less or equal to `value`
	#
	# https://docs.mongodb.com/manual/reference/operator/query/lte/
	#
	# ~~~json
	# {field: {$lte: value} }
	# ~~~
	fun lte(field: String, value: nullable Serializable): MongoMatch do
		op("lte", field, value)
		return self
	end

	# Match documents where `field` exists or not
	#
	# https://docs.mongodb.com/manual/reference/operator/query/exists/#op._S_exists
	#
	# ~~~json
	# {field: {$exists: boolean} }
	# ~~~
	#
	# When `exists` is true, `$exists` matches the documents that contain the
	# field, including documents where the field value is null.
	# If <boolean> is false, the query returns only the documents that do not
	# contain the field.
	fun exists(field: String, exists: Bool): MongoMatch do
		op("exists", field, exists)
		return self
	end

	# Match documents where `field` matches `pattern`
	#
	# To read more about the available options, see:
	# https://docs.mongodb.com/manual/reference/operator/query/regex/#op._S_regex
	#
	# ~~~json
	# {field: {$regex: 'pattern', $options: '<options>'} }
	# ~~~
	#
	# Provides regular expression capabilities for pattern matching strings in queries.
	# MongoDB uses Perl compatible regular expressions (i.e. "PCRE" ).
	fun regex(field: String, pattern: String, options: nullable String): MongoMatch do
		var q = new JsonObject
		q["$regex"] = pattern
		if options != null then q["$options"] = options
		self[field] = q
		return self
	end

	# Match documents where `field` is in `values`
	#
	# https://docs.mongodb.com/manual/reference/operator/query/in/
	#
	# ~~~json
	# { field: { $in: [<value1>, <value2>, ... <valueN> ] } }
	# ~~~
	#
	# `$in` selects the documents where the value of a field equals any value
	# in the specified array.
	fun is_in(field: String, values: Array[nullable Serializable]): MongoMatch do
		op("in", field, new JsonArray.from(values))
		return self
	end

	# Match documents where `field` is not in `values`
	#
	# https://docs.mongodb.com/manual/reference/operator/query/nin/
	#
	# ~~~json
	# { field: { $nin: [<value1>, <value2>, ... <valueN> ] } }
	# ~~~
	#
	# `$nin` selects the documents where:
	# * the field value is not in the specified array or
	# * the field does not exist.
	fun is_nin(field: String, values: Array[nullable Serializable]): MongoMatch do
		op("nin", field, new JsonArray.from(values))
		return self
	end

	# Logical `or`
	#
	# https://docs.mongodb.com/manual/reference/operator/query/or/#op._S_or
	#
	# The `$or` operator performs a logical OR operation on an array of two or
	# more `expressions` and selects the documents that satisfy at least one of
	# the `expressions`.
	#
	# The `$or` has the following syntax:
	#
	# ~~~json
	# { field: { $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] } }
	# ~~~
	fun lor(field: nullable String, expressions: Array[Serializable]): MongoMatch do
		op("or", field, new JsonArray.from(expressions))
		return self
	end

	# Logical `and`
	#
	# https://docs.mongodb.com/manual/reference/operator/query/and/#op._S_and
	#
	# The `$and` operator performs a logical AND operation on an array of two or
	# more `expressions` and selects the documents that satisfy all of the `expressions`.
	#
	# The `$and` has the following syntax:
	#
	# ~~~json
	# { field: { $and: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] } }
	# ~~~
	fun land(field: nullable String, expressions: Array[Serializable]): MongoMatch do
		op("and", field, new JsonArray.from(expressions))
		return self
	end

	# Logical `not`
	#
	# https://docs.mongodb.com/manual/reference/operator/query/not/#op._S_not
	#
	# `$not` performs a logical NOT operation on the specified `expression` and
	# selects the documents that do not match the `expression`.
	# This includes documents that do not contain the field.
	#
	# The $not has the following syntax:
	#
	# ~~~json
	# { field: { $not: { <expression> } } }
	# ~~~
	fun lnot(field: nullable String, expression: Serializable): MongoMatch do
		op("not", field, expression)
		return self
	end

	# Logical `nor`
	#
	# https://docs.mongodb.com/manual/reference/operator/query/nor/#op._S_nor
	#
	# `$nor` performs a logical NOR operation on an array of one or more query
	# expression and selects the documents that fail all the query expressions
	# in the array.
	#
	# The $nor has the following syntax:
	#
	# ~~~json
	# { field: { $nor: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] } }
	# ~~~
	fun lnor(field: nullable String, expressions: Array[Serializable]): MongoMatch do
		op("nor", field, new JsonArray.from(expressions))
		return self
	end

	# Array contains all
	#
	# https://docs.mongodb.com/manual/reference/operator/query/all/#op._S_all
	#
	# `$all` selects the documents where the value of a field is an array that
	# contains all the specified elements.
	#
	# ~~~json
	# { field: { $all: [ <value1>, <value2>, ... ] } }
	# ~~~
	fun all(field: nullable String, values: Array[Serializable]): MongoMatch do
		op("all", field, new JsonArray.from(values))
		return self
	end

	# Array element match
	#
	# https://docs.mongodb.com/manual/reference/operator/query/elemMatch/#op._S_elemMatch
	#
	# `$elemMatch` matches documents that contain an array field with at least
	# one element that matches all the specified query criteria.
	#
	# ~~~json
	# { field: { $elemMatch: <query> } }
	# ~~~
	fun elem_match(field: nullable String, query: Serializable): MongoMatch do
		op("elemMatch", field, query)
		return self
	end

	# Array size match
	#
	# https://docs.mongodb.com/manual/reference/operator/query/size/#op._S_size
	#
	# `$size` matches any array with the number of elements specified by the argument
	#
	# ~~~json
	# { field: { $size: <size> } }
	# ~~~
	fun size(field: nullable String, size: Int): MongoMatch do
		op("size", field, size)
		return self
	end
end
lib/mongodb/queries.nit:52,1--348,3