summaryrefslogtreecommitdiff
path: root/node_modules/mongoose/docs/finding-documents.md
blob: db6e25da17a277ad3308341d6d0bf12295741318 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
Querying
=================

Documents can be retrieved through `find`, `findOne` and `findById`. These
methods are executed on your `Model`s.

## Model.find

    Model.find(query, fields, options, callback)

    // fields and options can be omitted

### Simple query:

    Model.find({ 'some.value': 5 }, function (err, docs) {
      // docs is an array
    });

### Retrieving only certain fields

    Model.find({}, ['first', 'last'], function (err, docs) {
      // docs is an array of partially-`init`d documents
      // defaults are still applied and will be "populated"
    })

## Model.findOne

Same as `Model#find`, but only receives a single document as second parameter:

    Model.findOne({ age: 5}, function (err, doc){
      // doc is a Document
    });

## Model.findById

Same as `findOne`, but receives a value to search a document by their `_id`
key. This value is subject to casting, so it can be a hex string or a proper 
ObjectId.

    Model.findById(obj._id, function (err, doc){
      // doc is a Document
    });

## Model.count

Counts the number of documents matching `conditions`.

    Model.count(conditions, callback);

## Model.remove

Removes documents matching `conditions`.

    Model.remove(conditions, callback);

## Model.distinct

Finds distinct values of `field` for documents matching `conditions`.

    Model.distinct(field, conditions, callback);

## Model.where

Creates a Query for this model.
Handy when expressing complex directives.

    Model
    .where('age').gte(25)
    .where('tags').in(['movie', 'music', 'art'])
    .select('name', 'age', 'tags')
    .skip(20)
    .limit(10)
    .asc('age')
    .slaveOk()
    .hint({ age: 1, name: 1 })
    .run(callback);

## Model.$where

Sometimes you need to query for things in mongodb using a JavaScript
expression. You can do so via find({$where: javascript}), or you can
use the mongoose shortcut method $where via a Query chain or from
your mongoose Model.

    Model.$where('this.firstname === this.lastname').exec(callback)

## Model.update

Updates all documents matching `conditions` using the `update` clause. All
`update` values are casted to their appropriate types before being sent.

    var conditions = { name: 'borne' }
      , update = { $inc: { visits: 1 }}
      , options = { multi: true };

    Model.update(conditions, update, options, callback)

Note: for backwards compatibility, all top-level `update` keys that are
not $atomic operation names are treated as `$set` operations. Example:

    var query = { name: 'borne' };
    Model.update(query, { name: 'jason borne' }, options, callback)

    // is sent as

    Model.update(query, { $set: { name: 'jason borne' }}, options, callback)

## Query

Each of these methods returns a [Query](https://github.com/LearnBoost/mongoose/blob/master/lib/query.js).
If you don't pass a callback to these methods, the Query can be continued to be
modified (such as adding options, fields, etc), before it's `exec`d.

    var query = Model.find({});

    query.where('field', 5);
    query.limit(5);
    query.skip(100);

    query.exec(function (err, docs) {
      // called when the `query.complete` or `query.error` are called
      // internally
    });