-
Notifications
You must be signed in to change notification settings - Fork 73.1k
Expand file tree
/
Copy pathmodify.js
More file actions
127 lines (99 loc) · 2.44 KB
/
modify.js
File metadata and controls
127 lines (99 loc) · 2.44 KB
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
'use strict';
const utils = require('./utils')
;
/**
* Insert single document
* @param {Object} col
* @param {Object} doc
* @param {Object} options
*/
function insertOne (col, doc, options) {
return new Promise(function (resolve, reject) {
col.insertOne(doc, function mongoDone(err, result) {
if (err) {
reject(err);
} else {
const identifier = doc.identifier || result.insertedId.toString();
if (!options || options.normalize !== false) {
delete doc._id;
}
resolve(identifier);
}
});
});
}
/**
* Replace single document
* @param {Object} col
* @param {string} identifier
* @param {Object} doc
*/
function replaceOne (col, identifier, doc) {
return new Promise(function (resolve, reject) {
const filter = utils.filterForOne(identifier);
col.replaceOne(filter, doc, { upsert: true }, function mongoDone(err, result) {
if (err) {
reject(err);
} else {
resolve(result.matchedCount);
}
});
});
}
/**
* Update single document by identifier
* @param {Object} col
* @param {string} identifier
* @param {object} setFields
*/
function updateOne (col, identifier, setFields) {
return new Promise(function (resolve, reject) {
const filter = utils.filterForOne(identifier);
col.updateOne(filter, { $set: setFields }, function mongoDone(err, result) {
if (err) {
reject(err);
} else {
resolve({ updated: result.modifiedCount });
}
});
});
}
/**
* Permanently remove single document by identifier
* @param {Object} col
* @param {string} identifier
*/
function deleteOne (col, identifier) {
return new Promise(function (resolve, reject) {
const filter = utils.filterForOne(identifier);
col.deleteOne(filter, function mongoDone(err, result) {
if (err) {
reject(err);
} else {
resolve({ deleted: result.deletedCount });
}
});
});
}
/**
* Permanently remove many documents matching any of filtering criteria
*/
function deleteManyOr (col, filterDef) {
return new Promise(function (resolve, reject) {
const filter = utils.parseFilter(filterDef, 'or');
col.deleteMany(filter, function mongoDone(err, result) {
if (err) {
reject(err);
} else {
resolve({ deleted: result.deletedCount });
}
});
});
}
module.exports = {
insertOne,
replaceOne,
updateOne,
deleteOne,
deleteManyOr
};