w-orm-mongodb 1.1.26 → 1.1.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +17 -17
- package/.jsdoc +1 -1
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/babel.config.js +1 -0
- package/dist/w-orm-mongodb.umd.js +2 -2
- package/dist/w-orm-mongodb.umd.js.map +1 -1
- package/docs/WOrmMongodb.html +110 -99
- package/docs/WOrmMongodb.mjs.html +495 -403
- package/docs/index.html +4 -1
- package/docs/scripts/collapse.js +19 -0
- package/docs/scripts/commonNav.js +28 -0
- package/docs/scripts/search.js +16 -0
- package/docs/styles/jsdoc.css +13 -2
- package/docs/styles/prettify.css +1 -0
- package/g-basic.mjs +5 -1
- package/g-gfs.mjs +12 -1
- package/package.json +5 -10
- package/src/WOrmMongodb.mjs +491 -402
- package/test/basic.test.mjs +400 -0
- package/test/gfs.test.mjs +188 -0
- package/test/all.test.mjs +0 -10
package/src/WOrmMongodb.mjs
CHANGED
|
@@ -60,37 +60,47 @@ function WOrmMongodb(opt = {}) {
|
|
|
60
60
|
* @returns {Promise} 回傳Promise,resolve回傳數據,reject回傳錯誤訊息
|
|
61
61
|
*/
|
|
62
62
|
async function select(find = {}) {
|
|
63
|
-
|
|
64
|
-
//pm
|
|
65
|
-
let pm = genPm()
|
|
63
|
+
let isErr = false
|
|
66
64
|
|
|
67
65
|
//client
|
|
68
|
-
let client = await MongoClient.connect(opt.url, optMGConn)
|
|
66
|
+
// let client = await MongoClient.connect(opt.url, optMGConn)
|
|
67
|
+
let client = new MongoClient(opt.url, optMGConn)
|
|
68
|
+
|
|
69
|
+
//res
|
|
70
|
+
let res = null
|
|
71
|
+
try {
|
|
69
72
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
+
//database, collection
|
|
74
|
+
let database = client.db(opt.db)
|
|
75
|
+
let collection = database.collection(opt.cl)
|
|
73
76
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
.find(find) //find第二參數為option, 可放sort或limit等
|
|
77
|
+
//find
|
|
78
|
+
let cursor = collection.find(find)
|
|
77
79
|
//.sort({ $natural: -1 })
|
|
78
80
|
//.limit(N)
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
})
|
|
88
|
-
pm.resolve(res)
|
|
89
|
-
}
|
|
90
|
-
client.close()
|
|
81
|
+
|
|
82
|
+
//toArray
|
|
83
|
+
res = await cursor.toArray()
|
|
84
|
+
|
|
85
|
+
//omit
|
|
86
|
+
res = map(res, function(v) {
|
|
87
|
+
v = omit(v, '_id')
|
|
88
|
+
return v
|
|
91
89
|
})
|
|
92
90
|
|
|
93
|
-
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
isErr = true
|
|
94
|
+
res = err
|
|
95
|
+
}
|
|
96
|
+
finally {
|
|
97
|
+
await client.close()
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (isErr) {
|
|
101
|
+
return Promise.reject(res)
|
|
102
|
+
}
|
|
103
|
+
return res
|
|
94
104
|
}
|
|
95
105
|
|
|
96
106
|
|
|
@@ -102,60 +112,74 @@ function WOrmMongodb(opt = {}) {
|
|
|
102
112
|
* @returns {Promise} 回傳Promise,resolve回傳插入結果,reject回傳錯誤訊息
|
|
103
113
|
*/
|
|
104
114
|
async function insert(data) {
|
|
115
|
+
let isErr = false
|
|
105
116
|
|
|
106
117
|
//cloneDeep
|
|
107
118
|
data = cloneDeep(data)
|
|
108
119
|
|
|
109
|
-
//pm
|
|
110
|
-
let pm = genPm()
|
|
111
|
-
|
|
112
120
|
//client
|
|
113
|
-
let client = await MongoClient.connect(opt.url, optMGConn)
|
|
121
|
+
// let client = await MongoClient.connect(opt.url, optMGConn)
|
|
122
|
+
let client = new MongoClient(opt.url, optMGConn)
|
|
114
123
|
|
|
115
|
-
//
|
|
116
|
-
let
|
|
117
|
-
|
|
124
|
+
//res
|
|
125
|
+
let res = null
|
|
126
|
+
try {
|
|
118
127
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
128
|
+
//database, collection
|
|
129
|
+
let database = client.db(opt.db)
|
|
130
|
+
let collection = database.collection(opt.cl)
|
|
123
131
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
v.id = genID()
|
|
132
|
+
//check
|
|
133
|
+
if (!isarr(data)) {
|
|
134
|
+
data = [data]
|
|
128
135
|
}
|
|
129
|
-
return v
|
|
130
|
-
})
|
|
131
136
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
pm.reject(err)
|
|
137
|
+
//check id
|
|
138
|
+
data = map(data, function(v) {
|
|
139
|
+
if (!v.id) {
|
|
140
|
+
v.id = genID()
|
|
137
141
|
}
|
|
138
|
-
|
|
142
|
+
return v
|
|
143
|
+
})
|
|
139
144
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
res = {
|
|
143
|
-
n: size(data),
|
|
144
|
-
nInserted: res.insertedCount,
|
|
145
|
-
ok: res.acknowledged ? 1 : 0,
|
|
146
|
-
}
|
|
147
|
-
pm.resolve(res)
|
|
148
|
-
ee.emit('change', 'insert', data, res)
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
pm.reject(err)
|
|
152
|
-
}
|
|
145
|
+
//insertMany
|
|
146
|
+
res = await collection.insertMany(data)
|
|
153
147
|
|
|
148
|
+
//check
|
|
149
|
+
if (res.insertedCount > 0) {
|
|
150
|
+
|
|
151
|
+
//res
|
|
152
|
+
res = {
|
|
153
|
+
n: size(data),
|
|
154
|
+
nInserted: res.insertedCount,
|
|
155
|
+
ok: res.acknowledged ? 1 : 0,
|
|
154
156
|
}
|
|
155
|
-
client.close()
|
|
156
|
-
})
|
|
157
157
|
|
|
158
|
-
|
|
158
|
+
//emit
|
|
159
|
+
ee.emit('change', 'insert', data, res)
|
|
160
|
+
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
isErr = true
|
|
164
|
+
|
|
165
|
+
//res
|
|
166
|
+
res = `no insert data`
|
|
167
|
+
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
}
|
|
171
|
+
catch (err) {
|
|
172
|
+
isErr = true
|
|
173
|
+
res = err
|
|
174
|
+
}
|
|
175
|
+
finally {
|
|
176
|
+
await client.close()
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
if (isErr) {
|
|
180
|
+
return Promise.reject(res)
|
|
181
|
+
}
|
|
182
|
+
return res
|
|
159
183
|
}
|
|
160
184
|
|
|
161
185
|
|
|
@@ -170,6 +194,7 @@ function WOrmMongodb(opt = {}) {
|
|
|
170
194
|
* @returns {Promise} 回傳Promise,resolve回傳儲存結果,reject回傳錯誤訊息
|
|
171
195
|
*/
|
|
172
196
|
async function save(data, option = {}) {
|
|
197
|
+
let isErr = false
|
|
173
198
|
|
|
174
199
|
//cloneDeep
|
|
175
200
|
data = cloneDeep(data)
|
|
@@ -178,104 +203,96 @@ function WOrmMongodb(opt = {}) {
|
|
|
178
203
|
let autoInsert = get(option, 'autoInsert', true)
|
|
179
204
|
let atomic = get(option, 'atomic', false)
|
|
180
205
|
|
|
181
|
-
//pm
|
|
182
|
-
let pm = genPm()
|
|
183
|
-
|
|
184
206
|
//client
|
|
185
|
-
let client = await MongoClient.connect(opt.url, optMGConn)
|
|
207
|
+
// let client = await MongoClient.connect(opt.url, optMGConn)
|
|
208
|
+
let client = new MongoClient(opt.url, optMGConn)
|
|
186
209
|
|
|
187
|
-
//
|
|
188
|
-
let
|
|
189
|
-
|
|
210
|
+
//res
|
|
211
|
+
let res = null
|
|
212
|
+
try {
|
|
190
213
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
//oper
|
|
197
|
-
let oper = null
|
|
198
|
-
if (atomic) {
|
|
199
|
-
oper = 'findOneAndUpdate'
|
|
200
|
-
}
|
|
201
|
-
else {
|
|
202
|
-
oper = 'updateOne'
|
|
203
|
-
}
|
|
214
|
+
//database, collection
|
|
215
|
+
let database = client.db(opt.db)
|
|
216
|
+
let collection = database.collection(opt.cl)
|
|
204
217
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
218
|
+
//check
|
|
219
|
+
if (!isarr(data)) {
|
|
220
|
+
data = [data]
|
|
221
|
+
}
|
|
208
222
|
|
|
209
223
|
//oper
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
224
|
+
let oper = null
|
|
225
|
+
if (atomic) {
|
|
226
|
+
oper = 'findOneAndUpdate'
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
oper = 'updateOne'
|
|
230
|
+
}
|
|
216
231
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
n: res.matchedCount,
|
|
242
|
-
nModified: res.modifiedCount,
|
|
243
|
-
ok: res.acknowledged ? 1 : 0,
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
// console.log('res', res)
|
|
247
|
-
|
|
248
|
-
//autoInsert
|
|
249
|
-
if (autoInsert && res.n === 0) {
|
|
250
|
-
insert(v)
|
|
251
|
-
.then(function(res) {
|
|
252
|
-
pmm.resolve(res)
|
|
253
|
-
})
|
|
254
|
-
.catch(function(err) {
|
|
255
|
-
pmm.reject(err)
|
|
256
|
-
})
|
|
232
|
+
//pmSeries
|
|
233
|
+
res = await pmSeries(data, async(v) => {
|
|
234
|
+
|
|
235
|
+
//rest
|
|
236
|
+
let rest = null
|
|
237
|
+
|
|
238
|
+
//oper
|
|
239
|
+
rest = await collection[oper]({ id: v.id }, { $set: v },)
|
|
240
|
+
|
|
241
|
+
//lastErrorObject for findOneAndUpdate
|
|
242
|
+
if (rest.lastErrorObject) {
|
|
243
|
+
// console.log('rest.lastErrorObject', rest.lastErrorObject)
|
|
244
|
+
rest = {
|
|
245
|
+
// lastErrorObject: { n: 1, updatedExisting: true },
|
|
246
|
+
// value: {
|
|
247
|
+
// _id: new ObjectId("615c18bb6e5db9935b10d88e"),
|
|
248
|
+
// id: 'id-rosemary',
|
|
249
|
+
// name: 'rosemary',
|
|
250
|
+
// value: 123.456
|
|
251
|
+
// },
|
|
252
|
+
// ok: 1
|
|
253
|
+
n: rest.lastErrorObject.n,
|
|
254
|
+
nModified: rest.lastErrorObject.updatedExisting ? 1 : 0,
|
|
255
|
+
ok: 1,
|
|
257
256
|
}
|
|
258
|
-
|
|
259
|
-
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
rest = {
|
|
260
|
+
// acknowledged: true,
|
|
261
|
+
// modifiedCount: 1,
|
|
262
|
+
// upsertedId: null,
|
|
263
|
+
// upsertedCount: 0,
|
|
264
|
+
// matchedCount: 1
|
|
265
|
+
n: rest.matchedCount,
|
|
266
|
+
nModified: rest.modifiedCount,
|
|
267
|
+
ok: rest.acknowledged ? 1 : 0,
|
|
260
268
|
}
|
|
269
|
+
}
|
|
270
|
+
// console.log('rest', rest)
|
|
261
271
|
|
|
272
|
+
//autoInsert
|
|
273
|
+
if (autoInsert && rest.n === 0) {
|
|
274
|
+
rest = await insert(v)
|
|
262
275
|
}
|
|
263
|
-
})
|
|
264
276
|
|
|
265
|
-
|
|
266
|
-
})
|
|
267
|
-
.then(function(msg) {
|
|
268
|
-
pm.resolve(msg)
|
|
269
|
-
ee.emit('change', 'save', data, msg)
|
|
270
|
-
})
|
|
271
|
-
.catch(function(msg) {
|
|
272
|
-
pm.reject(msg)
|
|
273
|
-
})
|
|
274
|
-
.finally(function() {
|
|
275
|
-
client.close()
|
|
277
|
+
return rest
|
|
276
278
|
})
|
|
277
279
|
|
|
278
|
-
|
|
280
|
+
//emit
|
|
281
|
+
ee.emit('change', 'save', data, res)
|
|
282
|
+
|
|
283
|
+
}
|
|
284
|
+
catch (err) {
|
|
285
|
+
isErr = true
|
|
286
|
+
res = err
|
|
287
|
+
}
|
|
288
|
+
finally {
|
|
289
|
+
await client.close()
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
if (isErr) {
|
|
293
|
+
return Promise.reject(res)
|
|
294
|
+
}
|
|
295
|
+
return res
|
|
279
296
|
}
|
|
280
297
|
|
|
281
298
|
|
|
@@ -287,59 +304,63 @@ function WOrmMongodb(opt = {}) {
|
|
|
287
304
|
* @returns {Promise} 回傳Promise,resolve回傳刪除結果,reject回傳錯誤訊息
|
|
288
305
|
*/
|
|
289
306
|
async function del(data) {
|
|
307
|
+
let isErr = false
|
|
290
308
|
|
|
291
309
|
//cloneDeep
|
|
292
310
|
data = cloneDeep(data)
|
|
293
311
|
|
|
294
|
-
//pm
|
|
295
|
-
let pm = genPm()
|
|
296
|
-
|
|
297
312
|
//client
|
|
298
|
-
let client = await MongoClient.connect(opt.url, optMGConn)
|
|
313
|
+
// let client = await MongoClient.connect(opt.url, optMGConn)
|
|
314
|
+
let client = new MongoClient(opt.url, optMGConn)
|
|
299
315
|
|
|
300
|
-
//
|
|
301
|
-
let
|
|
302
|
-
|
|
316
|
+
//res
|
|
317
|
+
let res = null
|
|
318
|
+
try {
|
|
303
319
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
}
|
|
320
|
+
//database, collection
|
|
321
|
+
let database = client.db(opt.db)
|
|
322
|
+
let collection = database.collection(opt.cl)
|
|
308
323
|
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
324
|
+
//check
|
|
325
|
+
if (!isarr(data)) {
|
|
326
|
+
data = [data]
|
|
327
|
+
}
|
|
312
328
|
|
|
313
|
-
//
|
|
314
|
-
|
|
315
|
-
.deleteOne({ id: v.id }, function(err, res) {
|
|
316
|
-
if (err) {
|
|
317
|
-
pmm.resolve(err) //找不到數據刪除採resovle回傳
|
|
318
|
-
}
|
|
319
|
-
else {
|
|
320
|
-
res = {
|
|
321
|
-
n: res.deletedCount,
|
|
322
|
-
nDeleted: res.deletedCount,
|
|
323
|
-
ok: res.acknowledged ? 1 : 0,
|
|
324
|
-
}
|
|
325
|
-
pmm.resolve(res)
|
|
326
|
-
}
|
|
327
|
-
})
|
|
329
|
+
//pmSeries
|
|
330
|
+
res = await pmSeries(data, async(v) => {
|
|
328
331
|
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
332
|
+
//rest
|
|
333
|
+
let rest = null
|
|
334
|
+
|
|
335
|
+
//deleteOne
|
|
336
|
+
rest = await collection.deleteOne({ id: v.id })
|
|
337
|
+
|
|
338
|
+
//rest
|
|
339
|
+
rest = {
|
|
340
|
+
n: rest.deletedCount,
|
|
341
|
+
nDeleted: rest.deletedCount,
|
|
342
|
+
ok: rest.acknowledged ? 1 : 0,
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
return rest
|
|
340
346
|
})
|
|
341
347
|
|
|
342
|
-
|
|
348
|
+
//emit
|
|
349
|
+
ee.emit('change', 'del', data, res)
|
|
350
|
+
|
|
351
|
+
}
|
|
352
|
+
catch (err) {
|
|
353
|
+
isErr = true
|
|
354
|
+
res = err
|
|
355
|
+
}
|
|
356
|
+
finally {
|
|
357
|
+
await client.close()
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
if (isErr) {
|
|
361
|
+
return Promise.reject(res)
|
|
362
|
+
}
|
|
363
|
+
return res
|
|
343
364
|
}
|
|
344
365
|
|
|
345
366
|
|
|
@@ -351,36 +372,46 @@ function WOrmMongodb(opt = {}) {
|
|
|
351
372
|
* @returns {Promise} 回傳Promise,resolve回傳刪除結果,reject回傳錯誤訊息
|
|
352
373
|
*/
|
|
353
374
|
async function delAll(find = {}) {
|
|
354
|
-
|
|
355
|
-
//pm
|
|
356
|
-
let pm = genPm()
|
|
375
|
+
let isErr = false
|
|
357
376
|
|
|
358
377
|
//client
|
|
359
|
-
let client = await MongoClient.connect(opt.url, optMGConn)
|
|
378
|
+
// let client = await MongoClient.connect(opt.url, optMGConn)
|
|
379
|
+
let client = new MongoClient(opt.url, optMGConn)
|
|
360
380
|
|
|
361
|
-
//
|
|
362
|
-
let
|
|
363
|
-
|
|
381
|
+
//res
|
|
382
|
+
let res = null
|
|
383
|
+
try {
|
|
364
384
|
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
.
|
|
368
|
-
if (err) {
|
|
369
|
-
pm.resolve(err) //找不到數據刪除採resovle回傳
|
|
370
|
-
}
|
|
371
|
-
else {
|
|
372
|
-
res = {
|
|
373
|
-
n: res.deletedCount,
|
|
374
|
-
nDeleted: res.deletedCount,
|
|
375
|
-
ok: res.acknowledged ? 1 : 0,
|
|
376
|
-
}
|
|
377
|
-
pm.resolve(res)
|
|
378
|
-
ee.emit('change', 'delAll', null, res)
|
|
379
|
-
}
|
|
380
|
-
client.close()
|
|
381
|
-
})
|
|
385
|
+
//database, collection
|
|
386
|
+
let database = client.db(opt.db)
|
|
387
|
+
let collection = database.collection(opt.cl)
|
|
382
388
|
|
|
383
|
-
|
|
389
|
+
//deleteMany
|
|
390
|
+
res = await collection.deleteMany(find)
|
|
391
|
+
|
|
392
|
+
//res
|
|
393
|
+
res = {
|
|
394
|
+
n: res.deletedCount,
|
|
395
|
+
nDeleted: res.deletedCount,
|
|
396
|
+
ok: res.acknowledged ? 1 : 0,
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
//emit
|
|
400
|
+
ee.emit('change', 'delAll', null, res)
|
|
401
|
+
|
|
402
|
+
}
|
|
403
|
+
catch (err) {
|
|
404
|
+
isErr = true
|
|
405
|
+
res = err
|
|
406
|
+
}
|
|
407
|
+
finally {
|
|
408
|
+
await client.close()
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
if (isErr) {
|
|
412
|
+
return Promise.reject(res)
|
|
413
|
+
}
|
|
414
|
+
return res
|
|
384
415
|
}
|
|
385
416
|
|
|
386
417
|
|
|
@@ -392,9 +423,7 @@ function WOrmMongodb(opt = {}) {
|
|
|
392
423
|
* @returns {Promise} 回傳Promise,resolve回傳插入結果,reject回傳錯誤訊息
|
|
393
424
|
*/
|
|
394
425
|
async function insertGfs(u8a) {
|
|
395
|
-
|
|
396
|
-
//pm
|
|
397
|
-
let pm = genPm()
|
|
426
|
+
let isErr = false
|
|
398
427
|
|
|
399
428
|
//id
|
|
400
429
|
let id = genID()
|
|
@@ -403,47 +432,72 @@ function WOrmMongodb(opt = {}) {
|
|
|
403
432
|
let buf = Buffer.from(u8a)
|
|
404
433
|
|
|
405
434
|
//client
|
|
406
|
-
let client = await MongoClient.connect(opt.url, optMGConn)
|
|
435
|
+
// let client = await MongoClient.connect(opt.url, optMGConn)
|
|
436
|
+
let client = new MongoClient(opt.url, optMGConn)
|
|
407
437
|
|
|
408
|
-
//
|
|
409
|
-
let
|
|
438
|
+
//core
|
|
439
|
+
let core = async (id, buf) => {
|
|
410
440
|
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
chunkSizeBytes: 10 * 1024 * 1024, //10mb
|
|
414
|
-
bucketName: opt.cl
|
|
415
|
-
})
|
|
441
|
+
//pm
|
|
442
|
+
let pm = genPm()
|
|
416
443
|
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
sm._read = () => {}
|
|
420
|
-
sm.push(buf)
|
|
421
|
-
sm.push(null)
|
|
422
|
-
sm.pipe(bucket.openUploadStream(id)) //pipe是接bucket的Writable, 所以會監聽finish
|
|
423
|
-
.on('error', function(err) {
|
|
444
|
+
//database
|
|
445
|
+
let database = client.db(opt.db)
|
|
424
446
|
|
|
425
|
-
|
|
426
|
-
|
|
447
|
+
//bucket
|
|
448
|
+
let bucket = new mongodb.GridFSBucket(database, {
|
|
449
|
+
chunkSizeBytes: 10 * 1024 * 1024, //10mb
|
|
450
|
+
bucketName: opt.cl
|
|
451
|
+
})
|
|
427
452
|
|
|
428
|
-
|
|
429
|
-
|
|
453
|
+
//stream
|
|
454
|
+
let sm = new stream.Readable()
|
|
455
|
+
sm._read = () => {}
|
|
456
|
+
sm.push(buf)
|
|
457
|
+
sm.push(null)
|
|
458
|
+
sm.pipe(bucket.openUploadStream(id)) //pipe是接bucket的Writable, 所以會監聽finish
|
|
459
|
+
.on('error', function(err) {
|
|
430
460
|
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
let res = { n: 1, ok: 1, id: id }
|
|
461
|
+
//reject
|
|
462
|
+
pm.reject(err)
|
|
434
463
|
|
|
435
|
-
|
|
436
|
-
|
|
464
|
+
})
|
|
465
|
+
.on('finish', function() {
|
|
437
466
|
|
|
438
|
-
|
|
439
|
-
|
|
467
|
+
//res
|
|
468
|
+
let res = { n: 1, ok: 1, id }
|
|
440
469
|
|
|
441
|
-
|
|
442
|
-
|
|
470
|
+
//resolve
|
|
471
|
+
pm.resolve(res)
|
|
443
472
|
|
|
444
|
-
|
|
473
|
+
})
|
|
474
|
+
|
|
475
|
+
return pm
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
//res
|
|
479
|
+
let res = null
|
|
480
|
+
try {
|
|
445
481
|
|
|
446
|
-
|
|
482
|
+
//core
|
|
483
|
+
res = await core(id, buf)
|
|
484
|
+
|
|
485
|
+
//emit
|
|
486
|
+
ee.emit('change', 'insertGfs', null, res)
|
|
487
|
+
|
|
488
|
+
}
|
|
489
|
+
catch (err) {
|
|
490
|
+
isErr = true
|
|
491
|
+
res = err
|
|
492
|
+
}
|
|
493
|
+
finally {
|
|
494
|
+
await client.close()
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
if (isErr) {
|
|
498
|
+
return Promise.reject(res)
|
|
499
|
+
}
|
|
500
|
+
return res
|
|
447
501
|
}
|
|
448
502
|
|
|
449
503
|
|
|
@@ -455,93 +509,106 @@ function WOrmMongodb(opt = {}) {
|
|
|
455
509
|
* @returns {Promise} 回傳Promise,resolve回傳數據,reject回傳錯誤訊息
|
|
456
510
|
*/
|
|
457
511
|
async function selectGfs(id) {
|
|
458
|
-
|
|
459
|
-
//pm
|
|
460
|
-
let pm = genPm()
|
|
512
|
+
let isErr = false
|
|
461
513
|
|
|
462
514
|
//client
|
|
463
|
-
let client = await MongoClient.connect(opt.url, optMGConn)
|
|
515
|
+
// let client = await MongoClient.connect(opt.url, optMGConn)
|
|
516
|
+
let client = new MongoClient(opt.url, optMGConn)
|
|
464
517
|
|
|
465
|
-
//
|
|
466
|
-
let
|
|
518
|
+
//core
|
|
519
|
+
let core = async (id) => {
|
|
467
520
|
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
chunkSizeBytes: 10 * 1024 * 1024, //10mb
|
|
471
|
-
bucketName: opt.cl
|
|
472
|
-
})
|
|
521
|
+
//pm
|
|
522
|
+
let pm = genPm()
|
|
473
523
|
|
|
474
|
-
|
|
475
|
-
|
|
524
|
+
//database
|
|
525
|
+
let database = client.db(opt.db)
|
|
476
526
|
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
sm.on('error', function (err) {
|
|
527
|
+
//bucket
|
|
528
|
+
let bucket = new mongodb.GridFSBucket(database, {
|
|
529
|
+
chunkSizeBytes: 10 * 1024 * 1024, //10mb
|
|
530
|
+
bucketName: opt.cl
|
|
531
|
+
})
|
|
483
532
|
|
|
484
|
-
//
|
|
485
|
-
|
|
533
|
+
//buf
|
|
534
|
+
let buf = Buffer.from('')
|
|
486
535
|
|
|
487
|
-
//
|
|
488
|
-
|
|
536
|
+
//stream
|
|
537
|
+
let sm = bucket.openDownloadStreamByName(id)
|
|
538
|
+
sm.on('data', function (chunk) {
|
|
539
|
+
buf = Buffer.concat([buf, chunk])
|
|
540
|
+
})
|
|
541
|
+
sm.on('error', function (err) {
|
|
489
542
|
|
|
490
|
-
|
|
491
|
-
|
|
543
|
+
//reject
|
|
544
|
+
pm.reject(err)
|
|
492
545
|
|
|
493
|
-
|
|
494
|
-
|
|
546
|
+
})
|
|
547
|
+
sm.on('end', function () {
|
|
495
548
|
|
|
496
|
-
|
|
497
|
-
|
|
549
|
+
//u8a
|
|
550
|
+
let u8a = new Uint8Array(buf)
|
|
498
551
|
|
|
499
|
-
|
|
500
|
-
|
|
552
|
+
//clean memory
|
|
553
|
+
buf = null
|
|
501
554
|
|
|
502
|
-
|
|
503
|
-
|
|
555
|
+
//resolve
|
|
556
|
+
pm.resolve(u8a)
|
|
504
557
|
|
|
505
|
-
|
|
558
|
+
})
|
|
506
559
|
|
|
507
|
-
|
|
508
|
-
|
|
560
|
+
return pm
|
|
561
|
+
}
|
|
509
562
|
|
|
563
|
+
//res
|
|
564
|
+
let res = null
|
|
565
|
+
try {
|
|
510
566
|
|
|
511
|
-
|
|
567
|
+
//core
|
|
568
|
+
res = await core(id)
|
|
512
569
|
|
|
513
|
-
|
|
514
|
-
|
|
570
|
+
}
|
|
571
|
+
catch (err) {
|
|
572
|
+
isErr = true
|
|
573
|
+
res = err
|
|
574
|
+
}
|
|
575
|
+
finally {
|
|
576
|
+
await client.close()
|
|
577
|
+
}
|
|
515
578
|
|
|
516
|
-
|
|
517
|
-
|
|
579
|
+
if (isErr) {
|
|
580
|
+
return Promise.reject(res)
|
|
581
|
+
}
|
|
582
|
+
return res
|
|
583
|
+
}
|
|
518
584
|
|
|
519
|
-
//client
|
|
520
|
-
let client = await MongoClient.connect(opt.url, optMGConn)
|
|
521
585
|
|
|
522
|
-
|
|
523
|
-
|
|
586
|
+
async function _findGfs(find = {}, bucket) {
|
|
587
|
+
let isErr = false
|
|
524
588
|
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
bucketName: opt.cl
|
|
529
|
-
})
|
|
589
|
+
//res
|
|
590
|
+
let res = null
|
|
591
|
+
try {
|
|
530
592
|
|
|
531
|
-
|
|
593
|
+
//find
|
|
594
|
+
let cursor = bucket.find(find)
|
|
532
595
|
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
596
|
+
//toArray
|
|
597
|
+
res = await cursor.toArray()
|
|
598
|
+
|
|
599
|
+
}
|
|
600
|
+
catch (err) {
|
|
601
|
+
isErr = true
|
|
602
|
+
res = err
|
|
603
|
+
}
|
|
604
|
+
finally {
|
|
605
|
+
// await client.close()
|
|
606
|
+
}
|
|
543
607
|
|
|
544
|
-
|
|
608
|
+
if (isErr) {
|
|
609
|
+
return Promise.reject(res)
|
|
610
|
+
}
|
|
611
|
+
return res
|
|
545
612
|
}
|
|
546
613
|
|
|
547
614
|
|
|
@@ -553,87 +620,101 @@ function WOrmMongodb(opt = {}) {
|
|
|
553
620
|
* @returns {Promise} 回傳Promise,resolve回傳刪除結果,reject回傳錯誤訊息
|
|
554
621
|
*/
|
|
555
622
|
async function delGfs(id) {
|
|
556
|
-
|
|
557
|
-
//pm
|
|
558
|
-
let pm = genPm()
|
|
623
|
+
let isErr = false
|
|
559
624
|
|
|
560
625
|
//client
|
|
561
|
-
let client = await MongoClient.connect(opt.url, optMGConn)
|
|
626
|
+
// let client = await MongoClient.connect(opt.url, optMGConn)
|
|
627
|
+
let client = new MongoClient(opt.url, optMGConn)
|
|
562
628
|
|
|
563
|
-
//
|
|
564
|
-
let
|
|
629
|
+
//res
|
|
630
|
+
let res = null
|
|
631
|
+
try {
|
|
565
632
|
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
chunkSizeBytes: 10 * 1024 * 1024, //10mb
|
|
569
|
-
bucketName: opt.cl
|
|
570
|
-
})
|
|
571
|
-
|
|
572
|
-
//_findGfs
|
|
573
|
-
let res = await _findGfs({ filename: id }, bucket)
|
|
633
|
+
//database, collection
|
|
634
|
+
let database = client.db(opt.db)
|
|
574
635
|
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
else if (res.length > 1) {
|
|
581
|
-
pm.reject('duplicate id')
|
|
582
|
-
client.close()
|
|
583
|
-
}
|
|
584
|
-
else {
|
|
636
|
+
//bucket
|
|
637
|
+
let bucket = new mongodb.GridFSBucket(database, {
|
|
638
|
+
chunkSizeBytes: 10 * 1024 * 1024, //10mb
|
|
639
|
+
bucketName: opt.cl
|
|
640
|
+
})
|
|
585
641
|
|
|
586
|
-
//
|
|
587
|
-
|
|
642
|
+
//_findGfs
|
|
643
|
+
res = await _findGfs({ filename: id }, bucket)
|
|
588
644
|
|
|
589
|
-
//
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
nDeleted: 1,
|
|
598
|
-
ok: 1,
|
|
599
|
-
}
|
|
645
|
+
//check
|
|
646
|
+
if (res.length === 0) {
|
|
647
|
+
res = `can not find id[${id}]`
|
|
648
|
+
}
|
|
649
|
+
else if (res.length > 1) {
|
|
650
|
+
res = `duplicate id[${id}]`
|
|
651
|
+
}
|
|
652
|
+
else {
|
|
600
653
|
|
|
601
|
-
|
|
602
|
-
|
|
654
|
+
//bid, get _id from res[0]
|
|
655
|
+
let bid = res[0]._id
|
|
603
656
|
|
|
604
|
-
|
|
605
|
-
|
|
657
|
+
//delete
|
|
658
|
+
res = await bucket.delete(bid)
|
|
606
659
|
|
|
660
|
+
//res
|
|
661
|
+
res = {
|
|
662
|
+
n: 1,
|
|
663
|
+
nDeleted: 1,
|
|
664
|
+
ok: 1,
|
|
607
665
|
}
|
|
608
|
-
|
|
609
|
-
|
|
666
|
+
|
|
667
|
+
//emit
|
|
668
|
+
ee.emit('change', 'delGfs', null, res)
|
|
669
|
+
|
|
670
|
+
}
|
|
610
671
|
|
|
611
672
|
}
|
|
673
|
+
catch (err) {
|
|
674
|
+
isErr = true
|
|
675
|
+
res = err
|
|
676
|
+
}
|
|
677
|
+
finally {
|
|
678
|
+
await client.close()
|
|
679
|
+
}
|
|
612
680
|
|
|
613
|
-
|
|
681
|
+
if (isErr) {
|
|
682
|
+
return Promise.reject(res)
|
|
683
|
+
}
|
|
684
|
+
return res
|
|
614
685
|
}
|
|
615
686
|
|
|
616
687
|
|
|
617
688
|
async function _delGfs(bid, bucket) {
|
|
689
|
+
let isErr = false
|
|
618
690
|
|
|
619
|
-
//
|
|
620
|
-
let
|
|
691
|
+
//res
|
|
692
|
+
let res = null
|
|
693
|
+
try {
|
|
621
694
|
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
nDeleted: 1,
|
|
631
|
-
ok: 1,
|
|
632
|
-
})
|
|
695
|
+
//delete
|
|
696
|
+
res = await bucket.delete(bid)
|
|
697
|
+
|
|
698
|
+
//res
|
|
699
|
+
res = {
|
|
700
|
+
n: 1,
|
|
701
|
+
nDeleted: 1,
|
|
702
|
+
ok: 1,
|
|
633
703
|
}
|
|
634
|
-
})
|
|
635
704
|
|
|
636
|
-
|
|
705
|
+
}
|
|
706
|
+
catch (err) {
|
|
707
|
+
isErr = true
|
|
708
|
+
res = err
|
|
709
|
+
}
|
|
710
|
+
finally {
|
|
711
|
+
// await client.close()
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
if (isErr) {
|
|
715
|
+
return Promise.reject(res)
|
|
716
|
+
}
|
|
717
|
+
return res
|
|
637
718
|
}
|
|
638
719
|
|
|
639
720
|
|
|
@@ -645,54 +726,62 @@ function WOrmMongodb(opt = {}) {
|
|
|
645
726
|
* @returns {Promise} 回傳Promise,resolve回傳刪除結果,reject回傳錯誤訊息
|
|
646
727
|
*/
|
|
647
728
|
async function delAllGfs(find = {}) {
|
|
648
|
-
|
|
649
|
-
//pm
|
|
650
|
-
let pm = genPm()
|
|
729
|
+
let isErr = false
|
|
651
730
|
|
|
652
731
|
//client
|
|
653
|
-
let client = await MongoClient.connect(opt.url, optMGConn)
|
|
732
|
+
// let client = await MongoClient.connect(opt.url, optMGConn)
|
|
733
|
+
let client = new MongoClient(opt.url, optMGConn)
|
|
654
734
|
|
|
655
|
-
//
|
|
656
|
-
let
|
|
735
|
+
//res
|
|
736
|
+
let res = null
|
|
737
|
+
try {
|
|
657
738
|
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
chunkSizeBytes: 10 * 1024 * 1024, //10mb
|
|
661
|
-
bucketName: opt.cl
|
|
662
|
-
})
|
|
739
|
+
//database, collection
|
|
740
|
+
let database = client.db(opt.db)
|
|
663
741
|
|
|
664
|
-
|
|
665
|
-
|
|
742
|
+
//bucket
|
|
743
|
+
let bucket = new mongodb.GridFSBucket(database, {
|
|
744
|
+
chunkSizeBytes: 10 * 1024 * 1024, //10mb
|
|
745
|
+
bucketName: opt.cl
|
|
746
|
+
})
|
|
666
747
|
|
|
667
|
-
|
|
668
|
-
|
|
748
|
+
//_findGfs
|
|
749
|
+
res = await _findGfs(find, bucket)
|
|
669
750
|
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
let bid = v._id
|
|
673
|
-
return _delGfs(bid, bucket)
|
|
674
|
-
})
|
|
751
|
+
//n
|
|
752
|
+
let n = size(res)
|
|
675
753
|
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
754
|
+
//ps
|
|
755
|
+
let ps = map(res, function(v) {
|
|
756
|
+
let bid = v._id
|
|
757
|
+
return _delGfs(bid, bucket)
|
|
758
|
+
})
|
|
680
759
|
|
|
681
|
-
|
|
682
|
-
|
|
760
|
+
//all
|
|
761
|
+
res = await Promise.all(ps)
|
|
683
762
|
|
|
684
|
-
|
|
685
|
-
|
|
763
|
+
//res
|
|
764
|
+
res = {
|
|
765
|
+
n,
|
|
766
|
+
ok: 1
|
|
767
|
+
}
|
|
686
768
|
|
|
687
|
-
|
|
688
|
-
.
|
|
689
|
-
pm.reject(msg)
|
|
690
|
-
})
|
|
691
|
-
.finally(function() {
|
|
692
|
-
client.close()
|
|
693
|
-
})
|
|
769
|
+
//emit
|
|
770
|
+
ee.emit('change', 'delAllGfs', null, res)
|
|
694
771
|
|
|
695
|
-
|
|
772
|
+
}
|
|
773
|
+
catch (err) {
|
|
774
|
+
isErr = true
|
|
775
|
+
res = err
|
|
776
|
+
}
|
|
777
|
+
finally {
|
|
778
|
+
await client.close()
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
if (isErr) {
|
|
782
|
+
return Promise.reject(res)
|
|
783
|
+
}
|
|
784
|
+
return res
|
|
696
785
|
}
|
|
697
786
|
|
|
698
787
|
|