forked from arvention/ccapdev-mongoose
-
Notifications
You must be signed in to change notification settings - Fork 0
/
db.js
134 lines (118 loc) · 4.1 KB
/
db.js
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
125
126
127
128
129
130
131
132
133
134
// import module `mongoose`
const mongoose = require('mongoose');
// import module `User` from `../models/UserModel.js`
const User = require('./UserModel.js');
// ccapdev-mongoose is the name of the database
const url = 'mongodb://localhost:27017/ccapdev-mongoose';
// additional connection options
const options = {
useUnifiedTopology: true,
useNewUrlParser: true
};
// defines an object which contains necessary database functions
const database = {
/*
connects to database
*/
connect: function () {
mongoose.connect(url, options, function(error) {
if(error) throw error;
console.log('Connected to: ' + url);
});
},
/*
inserts a single `doc` to the database based on the model `model`
*/
insertOne: function(model, doc, callback) {
model.create(doc, function(error, result) {
if(error) return callback(false);
console.log('Added ' + result);
return callback(true);
});
},
/*
inserts multiple `docs` to the database based on the model `model`
*/
insertMany: function(model, docs) {
model.insertMany(docs, function(error, result) {
if(error) return callback(false);
console.log('Added ' + result);
return callback(true);
});
},
/*
searches for a single document based on the model `model`
filtered through the object `query`
limits the fields returned based on the string `projection`
callback function is called after the execution of findOne() function
*/
findOne: function(model, query, projection, callback) {
model.findOne(query, projection, function(error, result) {
if(error) return callback(false);
return callback(result);
});
},
/*
searches for multiple documents based on the model `model`
filtered through the object `query`
limits the fields returned based on the string `projection`
callback function is called after the execution of findMany() function
*/
findMany: function(model, query, projection, callback) {
model.find(query, projection, function(error, result) {
if(error) return callback(false);
return callback(result);
});
},
/*
updates the value defined in the object `update`
on a single document based on the model `model`
filtered by the object `filter`
*/
updateOne: function(model, filter, update) {
model.updateOne(filter, update, function(error, result) {
if(error) return callback(false);
console.log('Document modified: ' + result.nModified);
return callback(true);
});
},
/*
updates the value defined in the object `update`
on multiple documents based on the model `model`
filtered using the object `filter`
*/
updateMany: function(model, filter, update) {
model.updateMany(filter, update, function(error, result) {
if(error) return callback(false);
console.log('Documents modified: ' + result.nModified);
return callback(true);
});
},
/*
deletes a single document based on the model `model`
filtered using the object `conditions`
*/
deleteOne: function(model, conditions) {
model.deleteOne(conditions, function (error, result) {
if(error) return callback(false);
console.log('Document deleted: ' + result.deletedCount);
return callback(true);
});
},
/*
deletes multiple documents based on the model `model`
filtered using the object `conditions`
*/
deleteMany: function(model, conditions) {
model.deleteMany(conditions, function (error, result) {
if(error) return callback(false);
console.log('Document deleted: ' + result.deletedCount);
return callback(true);
});
}
}
/*
exports the object `database` (defined above)
when another script exports from this file
*/
module.exports = database;