mongoose
Version:
Mongoose MongoDB ODM
363 lines (210 loc) • 8.62 kB
Markdown
Queries
=================
A `Query` is what is returned when calling many `Model`
[methods](/docs/finding-documents.html). These `Query`
objects provide a chaining api to specify search terms,
cursor options, hints, and other behavior.
## Query#where
Lets you specify query terms with sugar.
query.where(path [, val])
`path` is a valid document path. `val` is optional. Its useful to omit
`val` when used in conjunction with other query methods. For example:
query
.where('name', 'Space Ghost')
.where('age').gte(21).lte(65)
.run(callback)
In this case, `gte()` and `lte()` operate on the previous path if not
explicitly passed. The above query results in the following query expression:
{ name: 'Space Ghost', age: { $gte: 21, $lte: 65 }}
## Query#$where
Specifies the javascript function to run on MongoDB on each document scanned.
See the [MongoDB docs](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-JavascriptExpressionsand%7B%7B%24where%7D%7D) for details.
Model.find().$where(fn)
`fn` can be either a function or a string.
## Query#$or, Query#or
Specifies the [$or](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24or) operator.
query.$or(array);
`array` is an array of expressions.
query.or([{ color: 'blue' }, { color: 'red' }]);
## Query#gt, Query#$gt
Specifies a [greater than](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%3C%2C%3C%3D%2C%3E%2C%3E%3D) expression.
query.$gt(path, val);
`$gt` is also one of the methods with extra chaining sugar: when only one
argument is passed, it uses the path used the last call to `where()`. Example:
Model.where('age').$gt(21)
Results in:
{ age: { $gt: 21 }}
## Query#gte, Query#$gte
Specifies a [greater than or equal to](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%3C%2C%3C%3D%2C%3E%2C%3E%3D) expression.
query.$gte(path, val);
`$gte` is also one of the methods with extra chaining sugar: when only one
argument is passed, it uses the path used the last call to `where()`. Example:
Model.where('age').$gte(21)
Results in:
{ age: { $gte: 21 }}
## Query#lt,Query#$lt
Specifies a [less than](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%3C%2C%3C%3D%2C%3E%2C%3E%3D) expression.
query.$lt(path, val);
`$lt` is also one of the methods with extra chaining sugar: when only one
argument is passed, it uses the path used the last call to `where()`. Example:
Model.where('age').$lt(21)
Results in:
{ age: { $lt: 21 }}
## Query#lte, Query#$lte
Specifies a [less than or equal to](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%3C%2C%3C%3D%2C%3E%2C%3E%3D) expression.
query.$lte(path, val);
`$lte` is also one of the methods with extra chaining sugar: when only one
argument is passed, it uses the path used the last call to `where()`. Example:
Model.where('age').$lte(21)
Results in:
{ age: { $lte: 21 }}
## Query#ne, Query#$ne, Query#notEqualTo
Specifies the [$ne](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24ne) operator.
query.$ne(path, val);
These methods have extra sugar in that
when only one argument is passed, the path in the last call
to `where()` is used. Example:
query.where('_id').ne('4ecf92f31993a52c58e07f6a')
and
query.notEqualTo('_id', '4ecf92f31993a52c58e07f6a')
both result in
{ _id: { $ne: ObjectId('4ecf92f31993a52c58e07f6a') }}
## Query#in, Query#$in
Specifies the [$in](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in) operator.
query.$in(path, array)
These methods have extra sugar in that
when only one argument is passed, the path in the last call
to `where()` is used.
query.where('tags').in(['game', 'fun', 'holiday'])
results in
{ tags: { $in: ['game', 'fun', 'holiday'] }}
## Query#nin, Query#$nin
Specifies the [$nin](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24nin) operator.
query.$nin(path, array)
These methods have extra sugar in that
when only one argument is passed, the path in the last call
to `where()` is used.
query.where('games').nin(['boring', 'lame'])
results in
{ games: { $nin: ['boring', 'lame'] }}
## Query#all, Query#$all
Specifies the [$all](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24all) operator.
query.$all(path, array)
These methods have extra sugar in that
when only one argument is passed, the path in the last call
to `where()` is used.
query.where('games').all(['fun', 'exhausting'])
results in
{ games: { $all: ['fun', 'exhausting'] }}
## Query#regex, Query#$regex
Specifies the [$regex](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-RegularExpressions) operator.
query.regex('name.first', /^a/i)
These methods have extra sugar in that
when only one argument is passed, the path in the last call
to `where()` is used.
query.where('name.first').$regex(/^a/i)
results in
{ 'name.first': { $regex: /^a/i }}
## Query#size, Query#$size
Specifies the [$size](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24size) operator.
query.$size(path, integer)
These methods have extra sugar in that
when only one argument is passed, the path in the last call
to `where()` is used.
query.size('comments', 2)
query.where('comments').size(2)
both result in
{ comments: { $size: 2 }}
## Query#mod, Query#$mod
Specifies the [$mod](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24mod) operator.
var array = [10, 1]
query.mod(path, array)
query.mod(path, 10, 1)
query.where(path).$mod(10, 1)
all result in
{ path: { $mod: [10, 1] }}
## Query#exists, Query#$exists
Specifies the [$exists](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24exists) operator.
query.exists(path, Boolean)
These methods have extra sugar in that
when only one argument is passed, the path from the last call
to `where()` is used.
Given the following query,
var query = Model.find();
the following queries
query.exists('occupation');
query.exists('occupation', true);
query.where('occupation').exists();
all result in
{ occupation: { $exists: true }}
Another example:
query.exists('occupation', false)
query.where('occupation').exists(false);
result in
{ occupation: { $exists: false }}
## Query#elemMatch, Query#$elemMatch
Specifies the [$elemMatch](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24elemMatch) operator.
query.elemMatch(path, criteria)
query.where(path).elemMatch(criteria)
Functions can also be passed so you can further use query sugar
to declare the expression:
query.where(path).elemMatch(function)
query.elemMatch(path, function)
In this case a `query` is passed as the only argument into the function.
query.where('comments').elemMatch(function (elem) {
elem.where('author', 'bnoguchi')
elem.where('votes').gte(5);
});
Results in
{ comments: { $elemMatch: { author: 'bnoguchi', votes: { $gte: 5 }}}}
## Query#within, Query#$within
## Query#box, Query#$box
## Query#center, Query#$center
## Query#centerSphere, Query#$centerSphere
## Query#near, Query#$near
Specifies the [$near](http://www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-Querying) operator.
var array = [10, 1]
query.near(path, array)
query.near(path, 10, 1)
query.where(path).$near(10, 1)
all result in
{ path: { $near: [10, 1] }}
## Query#maxDistance, Query#$maxDistance
Specifies the [$maxDistance](http://www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-Querying) operator.
query.where('checkin').near([40, -72]).maxDistance(1);
results in
{ checkin: { $near: [40, -72], $maxDistance: 1 }}
## Query#select
## Query#fields
## Query#only
## Query#exclude
## Query#slice
## Query#$slice
## Query#populate
// sorting
## Query#sort
## Query#asc
## Query#desc
// options
## Query#limit
## Query#skip
## Query#maxscan
## Query#snapshot
## Query#batchSize
## Query#slaveOk
## Query#hint
// executing
## Query#find
query.find(criteria [, callback])
## Query#findOne
## Query#count
## Query#distinct
## Query#update
## Query#remove
## Query#run
## Query#exec
query.run([callback])
## Query#each
## Query#stream
Returns a [QueryStream](/docs/querystream.html) for the query.
Model.find({}).stream().pipe(writeStream)