w-orm-mongodb 1.1.27 → 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/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 +4 -4
- 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
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
<link type="text/css" rel="stylesheet" href="styles/prettify.css">
|
|
15
15
|
<link type="text/css" rel="stylesheet" href="styles/jsdoc.css">
|
|
16
16
|
<script src="scripts/nav.js" defer></script>
|
|
17
|
+
|
|
17
18
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
18
19
|
</head>
|
|
19
20
|
<body>
|
|
@@ -27,7 +28,9 @@
|
|
|
27
28
|
|
|
28
29
|
<nav >
|
|
29
30
|
|
|
31
|
+
|
|
30
32
|
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="WOrmMongodb.html">WOrmMongodb</a><ul class='methods'><li data-type='method'><a href="WOrmMongodb.html#.del">del</a></li><li data-type='method'><a href="WOrmMongodb.html#.delAll">delAll</a></li><li data-type='method'><a href="WOrmMongodb.html#.delAllGfs">delAllGfs</a></li><li data-type='method'><a href="WOrmMongodb.html#.delGfs">delGfs</a></li><li data-type='method'><a href="WOrmMongodb.html#.insert">insert</a></li><li data-type='method'><a href="WOrmMongodb.html#.insertGfs">insertGfs</a></li><li data-type='method'><a href="WOrmMongodb.html#.save">save</a></li><li data-type='method'><a href="WOrmMongodb.html#.select">select</a></li><li data-type='method'><a href="WOrmMongodb.html#.selectGfs">selectGfs</a></li></ul></li></ul>
|
|
33
|
+
|
|
31
34
|
</nav>
|
|
32
35
|
|
|
33
36
|
<div id="main">
|
|
@@ -104,37 +107,47 @@ function WOrmMongodb(opt = {}) {
|
|
|
104
107
|
* @returns {Promise} 回傳Promise,resolve回傳數據,reject回傳錯誤訊息
|
|
105
108
|
*/
|
|
106
109
|
async function select(find = {}) {
|
|
107
|
-
|
|
108
|
-
//pm
|
|
109
|
-
let pm = genPm()
|
|
110
|
+
let isErr = false
|
|
110
111
|
|
|
111
112
|
//client
|
|
112
|
-
let client = await MongoClient.connect(opt.url, optMGConn)
|
|
113
|
+
// let client = await MongoClient.connect(opt.url, optMGConn)
|
|
114
|
+
let client = new MongoClient(opt.url, optMGConn)
|
|
113
115
|
|
|
114
|
-
//
|
|
115
|
-
let
|
|
116
|
-
|
|
116
|
+
//res
|
|
117
|
+
let res = null
|
|
118
|
+
try {
|
|
117
119
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
.
|
|
120
|
+
//database, collection
|
|
121
|
+
let database = client.db(opt.db)
|
|
122
|
+
let collection = database.collection(opt.cl)
|
|
123
|
+
|
|
124
|
+
//find
|
|
125
|
+
let cursor = collection.find(find)
|
|
121
126
|
//.sort({ $natural: -1 })
|
|
122
127
|
//.limit(N)
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
})
|
|
132
|
-
pm.resolve(res)
|
|
133
|
-
}
|
|
134
|
-
client.close()
|
|
128
|
+
|
|
129
|
+
//toArray
|
|
130
|
+
res = await cursor.toArray()
|
|
131
|
+
|
|
132
|
+
//omit
|
|
133
|
+
res = map(res, function(v) {
|
|
134
|
+
v = omit(v, '_id')
|
|
135
|
+
return v
|
|
135
136
|
})
|
|
136
137
|
|
|
137
|
-
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
isErr = true
|
|
141
|
+
res = err
|
|
142
|
+
}
|
|
143
|
+
finally {
|
|
144
|
+
await client.close()
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (isErr) {
|
|
148
|
+
return Promise.reject(res)
|
|
149
|
+
}
|
|
150
|
+
return res
|
|
138
151
|
}
|
|
139
152
|
|
|
140
153
|
|
|
@@ -146,60 +159,74 @@ function WOrmMongodb(opt = {}) {
|
|
|
146
159
|
* @returns {Promise} 回傳Promise,resolve回傳插入結果,reject回傳錯誤訊息
|
|
147
160
|
*/
|
|
148
161
|
async function insert(data) {
|
|
162
|
+
let isErr = false
|
|
149
163
|
|
|
150
164
|
//cloneDeep
|
|
151
165
|
data = cloneDeep(data)
|
|
152
166
|
|
|
153
|
-
//pm
|
|
154
|
-
let pm = genPm()
|
|
155
|
-
|
|
156
167
|
//client
|
|
157
|
-
let client = await MongoClient.connect(opt.url, optMGConn)
|
|
168
|
+
// let client = await MongoClient.connect(opt.url, optMGConn)
|
|
169
|
+
let client = new MongoClient(opt.url, optMGConn)
|
|
158
170
|
|
|
159
|
-
//
|
|
160
|
-
let
|
|
161
|
-
|
|
171
|
+
//res
|
|
172
|
+
let res = null
|
|
173
|
+
try {
|
|
162
174
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
}
|
|
175
|
+
//database, collection
|
|
176
|
+
let database = client.db(opt.db)
|
|
177
|
+
let collection = database.collection(opt.cl)
|
|
167
178
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
v.id = genID()
|
|
179
|
+
//check
|
|
180
|
+
if (!isarr(data)) {
|
|
181
|
+
data = [data]
|
|
172
182
|
}
|
|
173
|
-
return v
|
|
174
|
-
})
|
|
175
183
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
pm.reject(err)
|
|
184
|
+
//check id
|
|
185
|
+
data = map(data, function(v) {
|
|
186
|
+
if (!v.id) {
|
|
187
|
+
v.id = genID()
|
|
181
188
|
}
|
|
182
|
-
|
|
189
|
+
return v
|
|
190
|
+
})
|
|
183
191
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
ok: res.acknowledged ? 1 : 0,
|
|
190
|
-
}
|
|
191
|
-
pm.resolve(res)
|
|
192
|
-
ee.emit('change', 'insert', data, res)
|
|
193
|
-
}
|
|
194
|
-
else {
|
|
195
|
-
pm.reject(err)
|
|
196
|
-
}
|
|
192
|
+
//insertMany
|
|
193
|
+
res = await collection.insertMany(data)
|
|
194
|
+
|
|
195
|
+
//check
|
|
196
|
+
if (res.insertedCount > 0) {
|
|
197
197
|
|
|
198
|
+
//res
|
|
199
|
+
res = {
|
|
200
|
+
n: size(data),
|
|
201
|
+
nInserted: res.insertedCount,
|
|
202
|
+
ok: res.acknowledged ? 1 : 0,
|
|
198
203
|
}
|
|
199
|
-
client.close()
|
|
200
|
-
})
|
|
201
204
|
|
|
202
|
-
|
|
205
|
+
//emit
|
|
206
|
+
ee.emit('change', 'insert', data, res)
|
|
207
|
+
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
isErr = true
|
|
211
|
+
|
|
212
|
+
//res
|
|
213
|
+
res = `no insert data`
|
|
214
|
+
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
isErr = true
|
|
220
|
+
res = err
|
|
221
|
+
}
|
|
222
|
+
finally {
|
|
223
|
+
await client.close()
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
if (isErr) {
|
|
227
|
+
return Promise.reject(res)
|
|
228
|
+
}
|
|
229
|
+
return res
|
|
203
230
|
}
|
|
204
231
|
|
|
205
232
|
|
|
@@ -214,6 +241,7 @@ function WOrmMongodb(opt = {}) {
|
|
|
214
241
|
* @returns {Promise} 回傳Promise,resolve回傳儲存結果,reject回傳錯誤訊息
|
|
215
242
|
*/
|
|
216
243
|
async function save(data, option = {}) {
|
|
244
|
+
let isErr = false
|
|
217
245
|
|
|
218
246
|
//cloneDeep
|
|
219
247
|
data = cloneDeep(data)
|
|
@@ -222,104 +250,96 @@ function WOrmMongodb(opt = {}) {
|
|
|
222
250
|
let autoInsert = get(option, 'autoInsert', true)
|
|
223
251
|
let atomic = get(option, 'atomic', false)
|
|
224
252
|
|
|
225
|
-
//pm
|
|
226
|
-
let pm = genPm()
|
|
227
|
-
|
|
228
253
|
//client
|
|
229
|
-
let client = await MongoClient.connect(opt.url, optMGConn)
|
|
230
|
-
|
|
231
|
-
//database, collection
|
|
232
|
-
let database = client.db(opt.db)
|
|
233
|
-
let collection = database.collection(opt.cl)
|
|
254
|
+
// let client = await MongoClient.connect(opt.url, optMGConn)
|
|
255
|
+
let client = new MongoClient(opt.url, optMGConn)
|
|
234
256
|
|
|
235
|
-
//
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
}
|
|
257
|
+
//res
|
|
258
|
+
let res = null
|
|
259
|
+
try {
|
|
239
260
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
oper = 'findOneAndUpdate'
|
|
244
|
-
}
|
|
245
|
-
else {
|
|
246
|
-
oper = 'updateOne'
|
|
247
|
-
}
|
|
261
|
+
//database, collection
|
|
262
|
+
let database = client.db(opt.db)
|
|
263
|
+
let collection = database.collection(opt.cl)
|
|
248
264
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
265
|
+
//check
|
|
266
|
+
if (!isarr(data)) {
|
|
267
|
+
data = [data]
|
|
268
|
+
}
|
|
252
269
|
|
|
253
270
|
//oper
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
271
|
+
let oper = null
|
|
272
|
+
if (atomic) {
|
|
273
|
+
oper = 'findOneAndUpdate'
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
oper = 'updateOne'
|
|
277
|
+
}
|
|
260
278
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
n: res.matchedCount,
|
|
286
|
-
nModified: res.modifiedCount,
|
|
287
|
-
ok: res.acknowledged ? 1 : 0,
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
// console.log('res', res)
|
|
291
|
-
|
|
292
|
-
//autoInsert
|
|
293
|
-
if (autoInsert && res.n === 0) {
|
|
294
|
-
insert(v)
|
|
295
|
-
.then(function(res) {
|
|
296
|
-
pmm.resolve(res)
|
|
297
|
-
})
|
|
298
|
-
.catch(function(err) {
|
|
299
|
-
pmm.reject(err)
|
|
300
|
-
})
|
|
279
|
+
//pmSeries
|
|
280
|
+
res = await pmSeries(data, async(v) => {
|
|
281
|
+
|
|
282
|
+
//rest
|
|
283
|
+
let rest = null
|
|
284
|
+
|
|
285
|
+
//oper
|
|
286
|
+
rest = await collection[oper]({ id: v.id }, { $set: v },)
|
|
287
|
+
|
|
288
|
+
//lastErrorObject for findOneAndUpdate
|
|
289
|
+
if (rest.lastErrorObject) {
|
|
290
|
+
// console.log('rest.lastErrorObject', rest.lastErrorObject)
|
|
291
|
+
rest = {
|
|
292
|
+
// lastErrorObject: { n: 1, updatedExisting: true },
|
|
293
|
+
// value: {
|
|
294
|
+
// _id: new ObjectId("615c18bb6e5db9935b10d88e"),
|
|
295
|
+
// id: 'id-rosemary',
|
|
296
|
+
// name: 'rosemary',
|
|
297
|
+
// value: 123.456
|
|
298
|
+
// },
|
|
299
|
+
// ok: 1
|
|
300
|
+
n: rest.lastErrorObject.n,
|
|
301
|
+
nModified: rest.lastErrorObject.updatedExisting ? 1 : 0,
|
|
302
|
+
ok: 1,
|
|
301
303
|
}
|
|
302
|
-
|
|
303
|
-
|
|
304
|
+
}
|
|
305
|
+
else {
|
|
306
|
+
rest = {
|
|
307
|
+
// acknowledged: true,
|
|
308
|
+
// modifiedCount: 1,
|
|
309
|
+
// upsertedId: null,
|
|
310
|
+
// upsertedCount: 0,
|
|
311
|
+
// matchedCount: 1
|
|
312
|
+
n: rest.matchedCount,
|
|
313
|
+
nModified: rest.modifiedCount,
|
|
314
|
+
ok: rest.acknowledged ? 1 : 0,
|
|
304
315
|
}
|
|
316
|
+
}
|
|
317
|
+
// console.log('rest', rest)
|
|
305
318
|
|
|
319
|
+
//autoInsert
|
|
320
|
+
if (autoInsert && rest.n === 0) {
|
|
321
|
+
rest = await insert(v)
|
|
306
322
|
}
|
|
307
|
-
})
|
|
308
323
|
|
|
309
|
-
|
|
310
|
-
})
|
|
311
|
-
.then(function(msg) {
|
|
312
|
-
pm.resolve(msg)
|
|
313
|
-
ee.emit('change', 'save', data, msg)
|
|
314
|
-
})
|
|
315
|
-
.catch(function(msg) {
|
|
316
|
-
pm.reject(msg)
|
|
317
|
-
})
|
|
318
|
-
.finally(function() {
|
|
319
|
-
client.close()
|
|
324
|
+
return rest
|
|
320
325
|
})
|
|
321
326
|
|
|
322
|
-
|
|
327
|
+
//emit
|
|
328
|
+
ee.emit('change', 'save', data, res)
|
|
329
|
+
|
|
330
|
+
}
|
|
331
|
+
catch (err) {
|
|
332
|
+
isErr = true
|
|
333
|
+
res = err
|
|
334
|
+
}
|
|
335
|
+
finally {
|
|
336
|
+
await client.close()
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
if (isErr) {
|
|
340
|
+
return Promise.reject(res)
|
|
341
|
+
}
|
|
342
|
+
return res
|
|
323
343
|
}
|
|
324
344
|
|
|
325
345
|
|
|
@@ -331,59 +351,63 @@ function WOrmMongodb(opt = {}) {
|
|
|
331
351
|
* @returns {Promise} 回傳Promise,resolve回傳刪除結果,reject回傳錯誤訊息
|
|
332
352
|
*/
|
|
333
353
|
async function del(data) {
|
|
354
|
+
let isErr = false
|
|
334
355
|
|
|
335
356
|
//cloneDeep
|
|
336
357
|
data = cloneDeep(data)
|
|
337
358
|
|
|
338
|
-
//pm
|
|
339
|
-
let pm = genPm()
|
|
340
|
-
|
|
341
359
|
//client
|
|
342
|
-
let client = await MongoClient.connect(opt.url, optMGConn)
|
|
360
|
+
// let client = await MongoClient.connect(opt.url, optMGConn)
|
|
361
|
+
let client = new MongoClient(opt.url, optMGConn)
|
|
343
362
|
|
|
344
|
-
//
|
|
345
|
-
let
|
|
346
|
-
|
|
363
|
+
//res
|
|
364
|
+
let res = null
|
|
365
|
+
try {
|
|
347
366
|
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
}
|
|
367
|
+
//database, collection
|
|
368
|
+
let database = client.db(opt.db)
|
|
369
|
+
let collection = database.collection(opt.cl)
|
|
352
370
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
371
|
+
//check
|
|
372
|
+
if (!isarr(data)) {
|
|
373
|
+
data = [data]
|
|
374
|
+
}
|
|
356
375
|
|
|
357
|
-
//
|
|
358
|
-
|
|
359
|
-
.deleteOne({ id: v.id }, function(err, res) {
|
|
360
|
-
if (err) {
|
|
361
|
-
pmm.resolve(err) //找不到數據刪除採resovle回傳
|
|
362
|
-
}
|
|
363
|
-
else {
|
|
364
|
-
res = {
|
|
365
|
-
n: res.deletedCount,
|
|
366
|
-
nDeleted: res.deletedCount,
|
|
367
|
-
ok: res.acknowledged ? 1 : 0,
|
|
368
|
-
}
|
|
369
|
-
pmm.resolve(res)
|
|
370
|
-
}
|
|
371
|
-
})
|
|
376
|
+
//pmSeries
|
|
377
|
+
res = await pmSeries(data, async(v) => {
|
|
372
378
|
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
379
|
+
//rest
|
|
380
|
+
let rest = null
|
|
381
|
+
|
|
382
|
+
//deleteOne
|
|
383
|
+
rest = await collection.deleteOne({ id: v.id })
|
|
384
|
+
|
|
385
|
+
//rest
|
|
386
|
+
rest = {
|
|
387
|
+
n: rest.deletedCount,
|
|
388
|
+
nDeleted: rest.deletedCount,
|
|
389
|
+
ok: rest.acknowledged ? 1 : 0,
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
return rest
|
|
384
393
|
})
|
|
385
394
|
|
|
386
|
-
|
|
395
|
+
//emit
|
|
396
|
+
ee.emit('change', 'del', data, res)
|
|
397
|
+
|
|
398
|
+
}
|
|
399
|
+
catch (err) {
|
|
400
|
+
isErr = true
|
|
401
|
+
res = err
|
|
402
|
+
}
|
|
403
|
+
finally {
|
|
404
|
+
await client.close()
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
if (isErr) {
|
|
408
|
+
return Promise.reject(res)
|
|
409
|
+
}
|
|
410
|
+
return res
|
|
387
411
|
}
|
|
388
412
|
|
|
389
413
|
|
|
@@ -395,36 +419,46 @@ function WOrmMongodb(opt = {}) {
|
|
|
395
419
|
* @returns {Promise} 回傳Promise,resolve回傳刪除結果,reject回傳錯誤訊息
|
|
396
420
|
*/
|
|
397
421
|
async function delAll(find = {}) {
|
|
398
|
-
|
|
399
|
-
//pm
|
|
400
|
-
let pm = genPm()
|
|
422
|
+
let isErr = false
|
|
401
423
|
|
|
402
424
|
//client
|
|
403
|
-
let client = await MongoClient.connect(opt.url, optMGConn)
|
|
425
|
+
// let client = await MongoClient.connect(opt.url, optMGConn)
|
|
426
|
+
let client = new MongoClient(opt.url, optMGConn)
|
|
404
427
|
|
|
405
|
-
//
|
|
406
|
-
let
|
|
407
|
-
|
|
428
|
+
//res
|
|
429
|
+
let res = null
|
|
430
|
+
try {
|
|
408
431
|
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
.
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
432
|
+
//database, collection
|
|
433
|
+
let database = client.db(opt.db)
|
|
434
|
+
let collection = database.collection(opt.cl)
|
|
435
|
+
|
|
436
|
+
//deleteMany
|
|
437
|
+
res = await collection.deleteMany(find)
|
|
438
|
+
|
|
439
|
+
//res
|
|
440
|
+
res = {
|
|
441
|
+
n: res.deletedCount,
|
|
442
|
+
nDeleted: res.deletedCount,
|
|
443
|
+
ok: res.acknowledged ? 1 : 0,
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
//emit
|
|
447
|
+
ee.emit('change', 'delAll', null, res)
|
|
448
|
+
|
|
449
|
+
}
|
|
450
|
+
catch (err) {
|
|
451
|
+
isErr = true
|
|
452
|
+
res = err
|
|
453
|
+
}
|
|
454
|
+
finally {
|
|
455
|
+
await client.close()
|
|
456
|
+
}
|
|
426
457
|
|
|
427
|
-
|
|
458
|
+
if (isErr) {
|
|
459
|
+
return Promise.reject(res)
|
|
460
|
+
}
|
|
461
|
+
return res
|
|
428
462
|
}
|
|
429
463
|
|
|
430
464
|
|
|
@@ -436,9 +470,7 @@ function WOrmMongodb(opt = {}) {
|
|
|
436
470
|
* @returns {Promise} 回傳Promise,resolve回傳插入結果,reject回傳錯誤訊息
|
|
437
471
|
*/
|
|
438
472
|
async function insertGfs(u8a) {
|
|
439
|
-
|
|
440
|
-
//pm
|
|
441
|
-
let pm = genPm()
|
|
473
|
+
let isErr = false
|
|
442
474
|
|
|
443
475
|
//id
|
|
444
476
|
let id = genID()
|
|
@@ -447,47 +479,72 @@ function WOrmMongodb(opt = {}) {
|
|
|
447
479
|
let buf = Buffer.from(u8a)
|
|
448
480
|
|
|
449
481
|
//client
|
|
450
|
-
let client = await MongoClient.connect(opt.url, optMGConn)
|
|
482
|
+
// let client = await MongoClient.connect(opt.url, optMGConn)
|
|
483
|
+
let client = new MongoClient(opt.url, optMGConn)
|
|
451
484
|
|
|
452
|
-
//
|
|
453
|
-
let
|
|
485
|
+
//core
|
|
486
|
+
let core = async (id, buf) => {
|
|
454
487
|
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
chunkSizeBytes: 10 * 1024 * 1024, //10mb
|
|
458
|
-
bucketName: opt.cl
|
|
459
|
-
})
|
|
488
|
+
//pm
|
|
489
|
+
let pm = genPm()
|
|
460
490
|
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
sm._read = () => {}
|
|
464
|
-
sm.push(buf)
|
|
465
|
-
sm.push(null)
|
|
466
|
-
sm.pipe(bucket.openUploadStream(id)) //pipe是接bucket的Writable, 所以會監聽finish
|
|
467
|
-
.on('error', function(err) {
|
|
491
|
+
//database
|
|
492
|
+
let database = client.db(opt.db)
|
|
468
493
|
|
|
469
|
-
|
|
470
|
-
|
|
494
|
+
//bucket
|
|
495
|
+
let bucket = new mongodb.GridFSBucket(database, {
|
|
496
|
+
chunkSizeBytes: 10 * 1024 * 1024, //10mb
|
|
497
|
+
bucketName: opt.cl
|
|
498
|
+
})
|
|
471
499
|
|
|
472
|
-
|
|
473
|
-
|
|
500
|
+
//stream
|
|
501
|
+
let sm = new stream.Readable()
|
|
502
|
+
sm._read = () => {}
|
|
503
|
+
sm.push(buf)
|
|
504
|
+
sm.push(null)
|
|
505
|
+
sm.pipe(bucket.openUploadStream(id)) //pipe是接bucket的Writable, 所以會監聽finish
|
|
506
|
+
.on('error', function(err) {
|
|
474
507
|
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
let res = { n: 1, ok: 1, id: id }
|
|
508
|
+
//reject
|
|
509
|
+
pm.reject(err)
|
|
478
510
|
|
|
479
|
-
|
|
480
|
-
|
|
511
|
+
})
|
|
512
|
+
.on('finish', function() {
|
|
481
513
|
|
|
482
|
-
|
|
483
|
-
|
|
514
|
+
//res
|
|
515
|
+
let res = { n: 1, ok: 1, id }
|
|
516
|
+
|
|
517
|
+
//resolve
|
|
518
|
+
pm.resolve(res)
|
|
484
519
|
|
|
485
|
-
|
|
486
|
-
client.close()
|
|
520
|
+
})
|
|
487
521
|
|
|
488
|
-
|
|
522
|
+
return pm
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
//res
|
|
526
|
+
let res = null
|
|
527
|
+
try {
|
|
528
|
+
|
|
529
|
+
//core
|
|
530
|
+
res = await core(id, buf)
|
|
531
|
+
|
|
532
|
+
//emit
|
|
533
|
+
ee.emit('change', 'insertGfs', null, res)
|
|
534
|
+
|
|
535
|
+
}
|
|
536
|
+
catch (err) {
|
|
537
|
+
isErr = true
|
|
538
|
+
res = err
|
|
539
|
+
}
|
|
540
|
+
finally {
|
|
541
|
+
await client.close()
|
|
542
|
+
}
|
|
489
543
|
|
|
490
|
-
|
|
544
|
+
if (isErr) {
|
|
545
|
+
return Promise.reject(res)
|
|
546
|
+
}
|
|
547
|
+
return res
|
|
491
548
|
}
|
|
492
549
|
|
|
493
550
|
|
|
@@ -499,93 +556,106 @@ function WOrmMongodb(opt = {}) {
|
|
|
499
556
|
* @returns {Promise} 回傳Promise,resolve回傳數據,reject回傳錯誤訊息
|
|
500
557
|
*/
|
|
501
558
|
async function selectGfs(id) {
|
|
502
|
-
|
|
503
|
-
//pm
|
|
504
|
-
let pm = genPm()
|
|
559
|
+
let isErr = false
|
|
505
560
|
|
|
506
561
|
//client
|
|
507
|
-
let client = await MongoClient.connect(opt.url, optMGConn)
|
|
562
|
+
// let client = await MongoClient.connect(opt.url, optMGConn)
|
|
563
|
+
let client = new MongoClient(opt.url, optMGConn)
|
|
508
564
|
|
|
509
|
-
//
|
|
510
|
-
let
|
|
565
|
+
//core
|
|
566
|
+
let core = async (id) => {
|
|
511
567
|
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
chunkSizeBytes: 10 * 1024 * 1024, //10mb
|
|
515
|
-
bucketName: opt.cl
|
|
516
|
-
})
|
|
568
|
+
//pm
|
|
569
|
+
let pm = genPm()
|
|
517
570
|
|
|
518
|
-
|
|
519
|
-
|
|
571
|
+
//database
|
|
572
|
+
let database = client.db(opt.db)
|
|
520
573
|
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
sm.on('error', function (err) {
|
|
574
|
+
//bucket
|
|
575
|
+
let bucket = new mongodb.GridFSBucket(database, {
|
|
576
|
+
chunkSizeBytes: 10 * 1024 * 1024, //10mb
|
|
577
|
+
bucketName: opt.cl
|
|
578
|
+
})
|
|
527
579
|
|
|
528
|
-
//
|
|
529
|
-
|
|
580
|
+
//buf
|
|
581
|
+
let buf = Buffer.from('')
|
|
530
582
|
|
|
531
|
-
//
|
|
532
|
-
|
|
583
|
+
//stream
|
|
584
|
+
let sm = bucket.openDownloadStreamByName(id)
|
|
585
|
+
sm.on('data', function (chunk) {
|
|
586
|
+
buf = Buffer.concat([buf, chunk])
|
|
587
|
+
})
|
|
588
|
+
sm.on('error', function (err) {
|
|
533
589
|
|
|
534
|
-
|
|
535
|
-
|
|
590
|
+
//reject
|
|
591
|
+
pm.reject(err)
|
|
536
592
|
|
|
537
|
-
|
|
538
|
-
|
|
593
|
+
})
|
|
594
|
+
sm.on('end', function () {
|
|
539
595
|
|
|
540
|
-
|
|
541
|
-
|
|
596
|
+
//u8a
|
|
597
|
+
let u8a = new Uint8Array(buf)
|
|
542
598
|
|
|
543
|
-
|
|
544
|
-
|
|
599
|
+
//clean memory
|
|
600
|
+
buf = null
|
|
545
601
|
|
|
546
|
-
|
|
547
|
-
|
|
602
|
+
//resolve
|
|
603
|
+
pm.resolve(u8a)
|
|
548
604
|
|
|
549
|
-
|
|
605
|
+
})
|
|
550
606
|
|
|
551
|
-
|
|
552
|
-
|
|
607
|
+
return pm
|
|
608
|
+
}
|
|
553
609
|
|
|
610
|
+
//res
|
|
611
|
+
let res = null
|
|
612
|
+
try {
|
|
554
613
|
|
|
555
|
-
|
|
614
|
+
//core
|
|
615
|
+
res = await core(id)
|
|
556
616
|
|
|
557
|
-
|
|
558
|
-
|
|
617
|
+
}
|
|
618
|
+
catch (err) {
|
|
619
|
+
isErr = true
|
|
620
|
+
res = err
|
|
621
|
+
}
|
|
622
|
+
finally {
|
|
623
|
+
await client.close()
|
|
624
|
+
}
|
|
559
625
|
|
|
560
|
-
|
|
561
|
-
|
|
626
|
+
if (isErr) {
|
|
627
|
+
return Promise.reject(res)
|
|
628
|
+
}
|
|
629
|
+
return res
|
|
630
|
+
}
|
|
562
631
|
|
|
563
|
-
//client
|
|
564
|
-
let client = await MongoClient.connect(opt.url, optMGConn)
|
|
565
632
|
|
|
566
|
-
|
|
567
|
-
|
|
633
|
+
async function _findGfs(find = {}, bucket) {
|
|
634
|
+
let isErr = false
|
|
568
635
|
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
bucketName: opt.cl
|
|
573
|
-
})
|
|
636
|
+
//res
|
|
637
|
+
let res = null
|
|
638
|
+
try {
|
|
574
639
|
|
|
575
|
-
|
|
640
|
+
//find
|
|
641
|
+
let cursor = bucket.find(find)
|
|
576
642
|
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
643
|
+
//toArray
|
|
644
|
+
res = await cursor.toArray()
|
|
645
|
+
|
|
646
|
+
}
|
|
647
|
+
catch (err) {
|
|
648
|
+
isErr = true
|
|
649
|
+
res = err
|
|
650
|
+
}
|
|
651
|
+
finally {
|
|
652
|
+
// await client.close()
|
|
653
|
+
}
|
|
587
654
|
|
|
588
|
-
|
|
655
|
+
if (isErr) {
|
|
656
|
+
return Promise.reject(res)
|
|
657
|
+
}
|
|
658
|
+
return res
|
|
589
659
|
}
|
|
590
660
|
|
|
591
661
|
|
|
@@ -597,87 +667,101 @@ function WOrmMongodb(opt = {}) {
|
|
|
597
667
|
* @returns {Promise} 回傳Promise,resolve回傳刪除結果,reject回傳錯誤訊息
|
|
598
668
|
*/
|
|
599
669
|
async function delGfs(id) {
|
|
600
|
-
|
|
601
|
-
//pm
|
|
602
|
-
let pm = genPm()
|
|
670
|
+
let isErr = false
|
|
603
671
|
|
|
604
672
|
//client
|
|
605
|
-
let client = await MongoClient.connect(opt.url, optMGConn)
|
|
673
|
+
// let client = await MongoClient.connect(opt.url, optMGConn)
|
|
674
|
+
let client = new MongoClient(opt.url, optMGConn)
|
|
606
675
|
|
|
607
|
-
//
|
|
608
|
-
let
|
|
676
|
+
//res
|
|
677
|
+
let res = null
|
|
678
|
+
try {
|
|
609
679
|
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
chunkSizeBytes: 10 * 1024 * 1024, //10mb
|
|
613
|
-
bucketName: opt.cl
|
|
614
|
-
})
|
|
615
|
-
|
|
616
|
-
//_findGfs
|
|
617
|
-
let res = await _findGfs({ filename: id }, bucket)
|
|
680
|
+
//database, collection
|
|
681
|
+
let database = client.db(opt.db)
|
|
618
682
|
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
else if (res.length > 1) {
|
|
625
|
-
pm.reject('duplicate id')
|
|
626
|
-
client.close()
|
|
627
|
-
}
|
|
628
|
-
else {
|
|
683
|
+
//bucket
|
|
684
|
+
let bucket = new mongodb.GridFSBucket(database, {
|
|
685
|
+
chunkSizeBytes: 10 * 1024 * 1024, //10mb
|
|
686
|
+
bucketName: opt.cl
|
|
687
|
+
})
|
|
629
688
|
|
|
630
|
-
//
|
|
631
|
-
|
|
689
|
+
//_findGfs
|
|
690
|
+
res = await _findGfs({ filename: id }, bucket)
|
|
632
691
|
|
|
633
|
-
//
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
nDeleted: 1,
|
|
642
|
-
ok: 1,
|
|
643
|
-
}
|
|
692
|
+
//check
|
|
693
|
+
if (res.length === 0) {
|
|
694
|
+
res = `can not find id[${id}]`
|
|
695
|
+
}
|
|
696
|
+
else if (res.length > 1) {
|
|
697
|
+
res = `duplicate id[${id}]`
|
|
698
|
+
}
|
|
699
|
+
else {
|
|
644
700
|
|
|
645
|
-
|
|
646
|
-
|
|
701
|
+
//bid, get _id from res[0]
|
|
702
|
+
let bid = res[0]._id
|
|
647
703
|
|
|
648
|
-
|
|
649
|
-
|
|
704
|
+
//delete
|
|
705
|
+
res = await bucket.delete(bid)
|
|
650
706
|
|
|
707
|
+
//res
|
|
708
|
+
res = {
|
|
709
|
+
n: 1,
|
|
710
|
+
nDeleted: 1,
|
|
711
|
+
ok: 1,
|
|
651
712
|
}
|
|
652
|
-
|
|
653
|
-
|
|
713
|
+
|
|
714
|
+
//emit
|
|
715
|
+
ee.emit('change', 'delGfs', null, res)
|
|
716
|
+
|
|
717
|
+
}
|
|
654
718
|
|
|
655
719
|
}
|
|
720
|
+
catch (err) {
|
|
721
|
+
isErr = true
|
|
722
|
+
res = err
|
|
723
|
+
}
|
|
724
|
+
finally {
|
|
725
|
+
await client.close()
|
|
726
|
+
}
|
|
656
727
|
|
|
657
|
-
|
|
728
|
+
if (isErr) {
|
|
729
|
+
return Promise.reject(res)
|
|
730
|
+
}
|
|
731
|
+
return res
|
|
658
732
|
}
|
|
659
733
|
|
|
660
734
|
|
|
661
735
|
async function _delGfs(bid, bucket) {
|
|
736
|
+
let isErr = false
|
|
662
737
|
|
|
663
|
-
//
|
|
664
|
-
let
|
|
738
|
+
//res
|
|
739
|
+
let res = null
|
|
740
|
+
try {
|
|
665
741
|
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
nDeleted: 1,
|
|
675
|
-
ok: 1,
|
|
676
|
-
})
|
|
742
|
+
//delete
|
|
743
|
+
res = await bucket.delete(bid)
|
|
744
|
+
|
|
745
|
+
//res
|
|
746
|
+
res = {
|
|
747
|
+
n: 1,
|
|
748
|
+
nDeleted: 1,
|
|
749
|
+
ok: 1,
|
|
677
750
|
}
|
|
678
|
-
})
|
|
679
751
|
|
|
680
|
-
|
|
752
|
+
}
|
|
753
|
+
catch (err) {
|
|
754
|
+
isErr = true
|
|
755
|
+
res = err
|
|
756
|
+
}
|
|
757
|
+
finally {
|
|
758
|
+
// await client.close()
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
if (isErr) {
|
|
762
|
+
return Promise.reject(res)
|
|
763
|
+
}
|
|
764
|
+
return res
|
|
681
765
|
}
|
|
682
766
|
|
|
683
767
|
|
|
@@ -689,54 +773,62 @@ function WOrmMongodb(opt = {}) {
|
|
|
689
773
|
* @returns {Promise} 回傳Promise,resolve回傳刪除結果,reject回傳錯誤訊息
|
|
690
774
|
*/
|
|
691
775
|
async function delAllGfs(find = {}) {
|
|
692
|
-
|
|
693
|
-
//pm
|
|
694
|
-
let pm = genPm()
|
|
776
|
+
let isErr = false
|
|
695
777
|
|
|
696
778
|
//client
|
|
697
|
-
let client = await MongoClient.connect(opt.url, optMGConn)
|
|
779
|
+
// let client = await MongoClient.connect(opt.url, optMGConn)
|
|
780
|
+
let client = new MongoClient(opt.url, optMGConn)
|
|
698
781
|
|
|
699
|
-
//
|
|
700
|
-
let
|
|
782
|
+
//res
|
|
783
|
+
let res = null
|
|
784
|
+
try {
|
|
701
785
|
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
chunkSizeBytes: 10 * 1024 * 1024, //10mb
|
|
705
|
-
bucketName: opt.cl
|
|
706
|
-
})
|
|
786
|
+
//database, collection
|
|
787
|
+
let database = client.db(opt.db)
|
|
707
788
|
|
|
708
|
-
|
|
709
|
-
|
|
789
|
+
//bucket
|
|
790
|
+
let bucket = new mongodb.GridFSBucket(database, {
|
|
791
|
+
chunkSizeBytes: 10 * 1024 * 1024, //10mb
|
|
792
|
+
bucketName: opt.cl
|
|
793
|
+
})
|
|
710
794
|
|
|
711
|
-
|
|
712
|
-
|
|
795
|
+
//_findGfs
|
|
796
|
+
res = await _findGfs(find, bucket)
|
|
713
797
|
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
let bid = v._id
|
|
717
|
-
return _delGfs(bid, bucket)
|
|
718
|
-
})
|
|
798
|
+
//n
|
|
799
|
+
let n = size(res)
|
|
719
800
|
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
801
|
+
//ps
|
|
802
|
+
let ps = map(res, function(v) {
|
|
803
|
+
let bid = v._id
|
|
804
|
+
return _delGfs(bid, bucket)
|
|
805
|
+
})
|
|
724
806
|
|
|
725
|
-
|
|
726
|
-
|
|
807
|
+
//all
|
|
808
|
+
res = await Promise.all(ps)
|
|
727
809
|
|
|
728
|
-
|
|
729
|
-
|
|
810
|
+
//res
|
|
811
|
+
res = {
|
|
812
|
+
n,
|
|
813
|
+
ok: 1
|
|
814
|
+
}
|
|
730
815
|
|
|
731
|
-
|
|
732
|
-
.
|
|
733
|
-
pm.reject(msg)
|
|
734
|
-
})
|
|
735
|
-
.finally(function() {
|
|
736
|
-
client.close()
|
|
737
|
-
})
|
|
816
|
+
//emit
|
|
817
|
+
ee.emit('change', 'delAllGfs', null, res)
|
|
738
818
|
|
|
739
|
-
|
|
819
|
+
}
|
|
820
|
+
catch (err) {
|
|
821
|
+
isErr = true
|
|
822
|
+
res = err
|
|
823
|
+
}
|
|
824
|
+
finally {
|
|
825
|
+
await client.close()
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
if (isErr) {
|
|
829
|
+
return Promise.reject(res)
|
|
830
|
+
}
|
|
831
|
+
return res
|
|
740
832
|
}
|
|
741
833
|
|
|
742
834
|
|
|
@@ -771,7 +863,7 @@ export default WOrmMongodb
|
|
|
771
863
|
<br class="clear">
|
|
772
864
|
|
|
773
865
|
<footer>
|
|
774
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc
|
|
866
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Thu Mar 30 2023 11:53:34 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
775
867
|
</footer>
|
|
776
868
|
|
|
777
869
|
<script>prettyPrint();</script>
|