-
-
Notifications
You must be signed in to change notification settings - Fork 3.8k
/
faq.jade
76 lines (66 loc) · 2.98 KB
/
faq.jade
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
extends layout
block append style
style.
hr {
display: block;
margin: 30px 0;
}
block content
h2 FAQ
:markdown
**Q**. Why don't my changes to arrays get saved when I update an element directly?
:js
doc.array[3] = 'changed';
doc.save();
:markdown
**A**. Mongoose doesn't create getters/setters for array indexes; without them mongoose never gets notified of the change and so doesn't know to persist the new value. The work-around is to use [MongooseArray#set](./api.html#types_array_MongooseArray-set) available in **Mongoose >= 3.2.0**.
:js
// 3.2.0
doc.array.set(3, 'changed');
doc.save();
// if running a version less than 3.2.0, you must mark the array modified before saving.
doc.array[3] = 'changed';
doc.markModified('array');
doc.save();
hr#assign_schemas_to_paths
:markdown
**Q**. Why doesn't mongoose allow me to directly assign schemas to paths?
:js
var userSchema = new Schema({ name: String });
new Schema({ user: userSchema })
:markdown
**A**. Schemas have a one-to-one mapping with documents. Documents have `save` and `remove` methods along with their own `pre` and `post` hooks which would lead to code like the following:
:js
doc.user.save(); // ?
doc.user.remove();// ?
doc.save()
:markdown
We've felt that this api would be more confusing than helpful. The counter argument is that arrays of sub-documents already have this functionality, but at best this too leads to confusion (calling `save` on a sub-document is a no-op and exists only to support `pre` save hooks). In the future this is likely to be revisited.
hr#enable_debugging
:markdown
**Q**. How can I enable debugging?
**A**. Set the `debug` option to `true`:
:js
mongoose.set('debug', true)
:markdown
All executed collection methods will log output of their arguments to your console.
hr#callback_never_executes
:markdown
**Q**. My `save()` callback never executes. What am I doing wrong?
**A**. All `collection` actions (insert, remove, queries, etc) are queued until the `connection` opens. It is likely that an error occurred while attempting to connect. Try adding an error handler to your connection.
:js
// if connecting on the default mongoose connection
mongoose.connect(..);
mongoose.connection.on('error', handleError);
// if connecting on a separate connection
var conn = mongoose.createConnection(..);
conn.on('error', handleError);
hr#creating_connections
:markdown
**Q**. Should I create/destroy a new connection for each database operation?
**A**. No. Open your connection when your application starts up and leave it open until the application shuts down.
hr
:markdown
**Something to add?**
If you'd like to contribute to this page, please [visit it](https://github.com/learnboost/mongoose/tree/master/docs/faq.jade) on github and use the [Edit](https://github.com/blog/844-forking-with-the-edit-button) button to send a pull request.
br