-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathtcb24.html
742 lines (702 loc) · 162 KB
/
tcb24.html
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
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
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
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
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
<html><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, minimal-ui">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<link rel="stylesheet" href="https://tcb-1251009918.cos.ap-guangzhou.myqcloud.com/pc/style.css" type="text/css" media="all">
<link rel="icon" href="https://tcb-1251009918.cos.ap-guangzhou.myqcloud.com/pc/icon.jpg">
<script>
window.location.href="https://cloudbase.net/community/guides/handbook/index.html"
</script>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script type="text/javascript" async="" src="https://www.google-analytics.com/analytics.js"></script><script src="https://hm.baidu.com/hm.js?43ba6db32083f56ba6b97d4aa8900a0e"></script><script async="" src="https://www.googletagmanager.com/gtag/js?id=UA-42802757-2"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-42802757-2');
</script>
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?43ba6db32083f56ba6b97d4aa8900a0e";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
<link rel="dns-prefetch" href="//fonts.googleapis.com">
<link rel="dns-prefetch" href="//s.w.org">
<link href="https://fonts.gstatic.com" crossorigin="" rel="preconnect">
<link rel="alternate" type="application/rss+xml" title="云开发技术训练营 » Feed" href="https://cloudbasegroup.org/feed/">
<link rel="alternate" type="application/rss+xml" title="云开发技术训练营 » 评论Feed" href="https://cloudbasegroup.org/comments/feed/">
<link rel="alternate" type="application/rss+xml" title="云开发技术训练营 » 存储、数组、对象评论Feed" href="https://cloudbasegroup.org/handbook/tcb/104/feed/">
<script type="text/javascript">
window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/12.0.0-1\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/12.0.0-1\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/cloudbasegroup.org\/wp-includes\/js\/wp-emoji-release.min.js?ver=5.2.2"}};
!function(a,b,c){function d(a,b){var c=String.fromCharCode;l.clearRect(0,0,k.width,k.height),l.fillText(c.apply(this,a),0,0);var d=k.toDataURL();l.clearRect(0,0,k.width,k.height),l.fillText(c.apply(this,b),0,0);var e=k.toDataURL();return d===e}function e(a){var b;if(!l||!l.fillText)return!1;switch(l.textBaseline="top",l.font="600 32px Arial",a){case"flag":return!(b=d([55356,56826,55356,56819],[55356,56826,8203,55356,56819]))&&(b=d([55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447],[55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447]),!b);case"emoji":return b=d([55357,56424,55356,57342,8205,55358,56605,8205,55357,56424,55356,57340],[55357,56424,55356,57342,8203,55358,56605,8203,55357,56424,55356,57340]),!b}return!1}function f(a){var c=b.createElement("script");c.src=a,c.defer=c.type="text/javascript",b.getElementsByTagName("head")[0].appendChild(c)}var g,h,i,j,k=b.createElement("canvas"),l=k.getContext&&k.getContext("2d");for(j=Array("flag","emoji"),c.supports={everything:!0,everythingExceptFlag:!0},i=0;i<j.length;i++)c.supports[j[i]]=e(j[i]),c.supports.everything=c.supports.everything&&c.supports[j[i]],"flag"!==j[i]&&(c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&c.supports[j[i]]);c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&!c.supports.flag,c.DOMReady=!1,c.readyCallback=function(){c.DOMReady=!0},c.supports.everything||(h=function(){c.readyCallback()},b.addEventListener?(b.addEventListener("DOMContentLoaded",h,!1),a.addEventListener("load",h,!1)):(a.attachEvent("onload",h),b.attachEvent("onreadystatechange",function(){"complete"===b.readyState&&c.readyCallback()})),g=c.source||{},g.concatemoji?f(g.concatemoji):g.wpemoji&&g.twemoji&&(f(g.twemoji),f(g.wpemoji)))}(window,document,window._wpemojiSettings);
</script>
<style type="text/css">
img.wp-smiley,
img.emoji {
display: inline !important;
border: none !important;
box-shadow: none !important;
height: 1em !important;
width: 1em !important;
margin: 0 .07em !important;
vertical-align: -0.1em !important;
background: none !important;
padding: 0 !important;
}
</style>
<link rel="stylesheet" id="crayon-theme-monokai-css" href="https://tcb-1251009918.cos.ap-guangzhou.myqcloud.com/pc/cdn/wp-content/plugins/crayon-syntax-highlighter/themes/monokai/monokai.css?ver=_2.7.2_beta" type="text/css" media="all">
<link rel="stylesheet" id="crayon-font-monaco-css" href="https://tcb-1251009918.cos.ap-guangzhou.myqcloud.com/pc/cdn/wp-content/plugins/crayon-syntax-highlighter/fonts/monaco.css?ver=_2.7.2_beta" type="text/css" media="all">
<link rel="stylesheet" id="wp-block-library-css" href="https://tcb-1251009918.cos.ap-guangzhou.myqcloud.com/pc/cdn/wp-includes/css/dist/block-library/style.min.css?ver=5.2.2" type="text/css" media="all">
<link rel="stylesheet" id="dashicons-css" href="https://tcb-1251009918.cos.ap-guangzhou.myqcloud.com/pc/cdn/wp-includes/css/dashicons.min.css?ver=5.2.2" type="text/css" media="all">
<link rel="stylesheet" id="post-views-counter-frontend-css" href="https://tcb-1251009918.cos.ap-guangzhou.myqcloud.com/pc/cdn/wp-content/plugins/post-views-counter/css/frontend.css?ver=1.3.1" type="text/css" media="all">
<link rel="stylesheet" id="twentyfourteen-lato-css" href="https://fonts.googleapis.com/css?family=Lato%3A300%2C400%2C700%2C900%2C300italic%2C400italic%2C700italic&subset=latin%2Clatin-ext" type="text/css" media="all">
<link rel="stylesheet" id="genericons-css" href="https://tcb-1251009918.cos.ap-guangzhou.myqcloud.com/pc/cdn/wp-content/themes/twentyfourteen/genericons/genericons.css?ver=3.0.3" type="text/css" media="all">
<link rel="stylesheet" id="twentyfourteen-style-css" href="https://tcb-1251009918.cos.ap-guangzhou.myqcloud.com/pc/cdn/wp-content/themes/twentyfourteen/style.css?ver=5.2.2" type="text/css" media="all">
<!--[if lt IE 9]>
<link rel='stylesheet' id='twentyfourteen-ie-css' href='https://tcb-1251009918.cos.ap-guangzhou.myqcloud.com/pc/cdn/wp-content/themes/twentyfourteen/css/ie.css?ver=20131205' type='text/css' media='all' />
<![endif]-->
<script type="text/javascript" src="https://tcb-1251009918.cos.ap-guangzhou.myqcloud.com/pc/cdn/wp-includes/js/jquery/jquery.js?ver=1.12.4-wp"></script>
<script type="text/javascript" src="https://tcb-1251009918.cos.ap-guangzhou.myqcloud.com/pc/cdn/wp-includes/js/jquery/jquery-migrate.min.js?ver=1.4.1"></script>
<link rel="https://api.w.org/" href="https://cloudbasegroup.org/wp-json/">
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://cloudbasegroup.org/xmlrpc.php?rsd">
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="https://tcb-1251009918.cos.ap-guangzhou.myqcloud.com/pc/cdn/wp-includes/wlwmanifest.xml">
<link rel="prev" title="云数据库入门" href="https://cloudbasegroup.org/handbook/tcb/102/">
<link rel="next" title="云开发与Nodejs" href="https://cloudbasegroup.org/handbook/tcb/106/">
<meta name="generator" content="WordPress 5.2.2">
<link rel="canonical" href="https://cloudbasegroup.org/handbook/tcb/104/">
<link rel="shortlink" href="https://cloudbasegroup.org/?p=104">
<link rel="alternate" type="application/json+oembed" href="https://cloudbasegroup.org/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fcloudbasegroup.org%2Fhandbook%2Ftcb%2F104%2F">
<link rel="alternate" type="text/xml+oembed" href="https://cloudbasegroup.org/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fcloudbasegroup.org%2Fhandbook%2Ftcb%2F104%2F&format=xml">
<style type="text/css">.recentcomments a{display:inline !important;padding:0 !important;margin:0 !important;}</style>
</head>
<body class="post-template-default single single-post postid-104 single-format-standard logged-in masthead-fixed full-width singular">
<div id="primary" class="content-area">
<div id="content" class="site-content" role="main">
<nav id="header-db" class="row navbar navbar-default">
<div class="navbar-header">
<div class="logotop fleft">
<a style="margin-top: 15px;" href="https://tencentcloudbase.github.io/handbook/tcb21.html" target="_blank"><img
src="https://tcb-1251009918.cos.ap-guangzhou.myqcloud.com/pc/icon.svg"></a>
</div>
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<div class="flex nav-items">
<h1 class="flex-item navbar-link">
云开发技术训练营</h1>
<div class="tcb-header__col tcb-header__col-right">
<ul class="tcb-header-nav">
<li class="tcb-header-nav__item ">
<a target="_blank" href="https://cloudbase.net/tools.html">工具</a></li>
<li class="tcb-header-nav__item "><a target="_blank"
href="https://cloudbase.net/sdk.html">SDK</a></li>
<li class="tcb-header-nav__item "><a href="https://docs.cloudbase.net" target="_blank">文档</a></li>
<li class="tcb-header-nav__item "><a target="_blank"
href="https://cloudbase.net/community.html">社区</a></li>
<li class="tcb-header-nav__item "><a target="_blank"
href="https://console.cloud.tencent.com/tcb?from=12341">去控制台</a></li>
</ul>
</div>
</div>
</div>
<div class="collapse navbar-collapse sop-sider" id="bs-example-navbar-collapse-1">
<div class="sop-menu">
<ul>
<li class="page_item no_current_page_item"><a href="./index.html">云开发训练营说明</a></li>
<li class="page_item no_current_page_item"><a><strong>小程序技术训练营</strong></a></li>
<li class="page_item no_current_page_item"><a href="./tcb01.html">小程序开发入门</a></li>
<li class="page_item no_current_page_item"><a href="./tcb02.html">WXML与WXSS</a></li>
<li class="page_item no_current_page_item"><a href="./tcb03.html">链接与图片</a></li>
<li class="page_item no_current_page_item"><a href="./tcb04.html">WeUI框架</a></li>
<li class="page_item no_current_page_item"><a href="./tcb05.html">渐变与动画</a></li>
<li class="page_item no_current_page_item"><a href="./tcb06.html">数据绑定</a></li>
<li class="page_item no_current_page_item"><a href="./tcb07.html">列表渲染与条件渲染</a></li>
<li class="page_item no_current_page_item"><a href="./tcb08.html">小程序组件</a></li>
<li class="page_item no_current_page_item"><a href="./tcb09.html">优化与部署上线</a></li>
<li class="page_item no_current_page_item"><a><strong>小程序与JavaScript</strong></a></li>
<li class="page_item no_current_page_item"><a href="./tcb11.html">JavaScript入门</a></li>
<li class="page_item no_current_page_item"><a href="./tcb12.html">点击事件</a></li>
<li class="page_item no_current_page_item"><a href="./tcb13.html">页面渲染</a></li>
<li class="page_item no_current_page_item"><a href="./tcb14.html">生命周期</a></li>
<li class="page_item no_current_page_item"><a href="./tcb15.html">数据表单</a></li>
<li class="page_item no_current_page_item"><a href="./tcb16.html">图片、缓存与文件</a></li>
<li class="page_item no_current_page_item"><a href="./tcb17.html">网络API</a></li>
<li class="page_item no_current_page_item"><a><strong>云开发技术训练营</strong></a></li>
<li class="page_item no_current_page_item"><a href="./tcb21.html">云开发快速入门</a></li>
<li class="page_item no_current_page_item"><a href="./tcb22.html">云开发能力</a></li>
<li class="page_item no_current_page_item"><a href="./tcb23.html">云数据库入门</a></li>
<li class="page_item current_page_item"><a href="./tcb24.html">存储、数组、对象</a></li>
<li class="page_item no_current_page_item"><a href="./tcb25.html">云开发与Nodejs</a></li>
</ul>
</div>
</div>
</nav>
<div class="sop-content">
<header class="entry-header">
<h1 class="entry-title">存储、数组、对象</h1>
</header><!-- .entry-header -->
<div class="entry-content">
<p>在<strong>云开发能力</strong>章节我们了解到小程序端和服务端都可以上传文件到云存储,不过在实际开发中<span style="color: #008000;"><strong>云存储里的文件链接需要被记录在数据库里才方便调用</strong></span>。接下来我们就来介绍云存储文件的增删改查是如何与数据库的增删改查结合在一起的。在<strong>云数据库入门</strong>章节我们所涉及到的数据库里数据类型还非常简单,在这一章里我们会来介绍<strong><span style="color: #008000;">如何操作数据库的数组和对象等复杂数据类型的增删改查</span></strong>。</p>
<h4>云存储与数据库的关系</h4>
<p>不经过数据库直接把文件上传到云存储里,这样文件的上传、删除、修改、查询是<strong><span style="color: #800000;">无法和具体的业务对应的</span></strong>,比如文章商品的配图、表单图片附件的添加与删除,都需要图片等资源能够与文章、商品、表单的ID能够一一对应才能进行管理(<span style="color: #800000;"><strong>在数据库里才能对应</strong></span>),而这些文章、商品、表单又可以通过数据库与用户的ID、其他业务联系起来,可见数据库在云存储的管理上扮演着极其重要的角色。</p>
<p><strong>数据库的设计与结构</strong></p>
<p>和Excel表、关系型数据库(如MySQL)以行和列、多表关系来设计表结构不同的是,云开发的数据库是基于文档的。我们可以在一个记录里嵌套多层数组和对象,把每个文档所需要的数据都嵌入到一个文档里,而不是分散到多个不同的集合。</p>
<p>比如我们想做一个网盘小程序,用来记录用户信息,以及创建的相册、文件夹,这里相册和文件夹因为可以创建很多个,所以它是一个数组;而每一个相册对象和文件夹对象里都可以存储一个照片列表和文件列表,我们发现在云开发数据库里一个元素的值是数组,数组里又嵌套对象,对象里又有元素是数组是非常常见的事情。</p>
<p>以下是网盘小程序的数据库设计,包含了一个用户的信息,上传的所有文件和照片等信息:</p>
<div id="crayon-5e40dd3940c10849666417" class="crayon-syntax crayon-theme-monokai crayon-font-monaco crayon-os-mac print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover disable-anim wrap" style="margin-top: 15px; margin-bottom: 15px; font-size: 14px !important; line-height: 20px !important; height: auto;">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" data-settings="" readonly="" style="tab-size: 4; font-size: 14px !important; line-height: 20px !important; z-index: 0; opacity: 0; overflow: hidden;">{
"_id": "自动生成的ID",
"_openid": "用户在当前小程序的openid",
"nickName": "用户的昵称",
"avatarUrl": "用户的头像链接",
"albums": [
{
"albumName": "相册名称",
"coverURL": "相册封面地址",
"photos": [
{
"comments": "照片备注",
"fileID": "照片的地址"
}
]
}
],
"folders": [
{
"folderName": "文件夹名称",
"files": [
{
"name": "文件名称",
"fileID": "文件的地址",
"comments": "文件备注"
}
]
}
]
}</textarea></div>
<div class="crayon-main" style="position: relative; z-index: 1; overflow: hidden;">
<table class="crayon-table" style="margin-left: -28px;">
<tbody><tr class="crayon-row">
<td class="crayon-nums " data-settings="hide">
<div class="crayon-nums-content" style="font-size: 14px !important; line-height: 20px !important;"><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-1" style="height: 20px;">1</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-2" style="height: 20px;">2</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-3" style="height: 20px;">3</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-4" style="height: 20px;">4</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-5" style="height: 20px;">5</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-6" style="height: 20px;">6</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-7" style="height: 20px;">7</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-8" style="height: 20px;">8</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-9" style="height: 20px;">9</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-10" style="height: 20px;">10</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-11" style="height: 20px;">11</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-12" style="height: 20px;">12</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-13" style="height: 20px;">13</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-14" style="height: 20px;">14</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-15" style="height: 20px;">15</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-16" style="height: 20px;">16</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-17" style="height: 20px;">17</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-18" style="height: 20px;">18</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-19" style="height: 20px;">19</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-20" style="height: 20px;">20</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-21" style="height: 20px;">21</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-22" style="height: 20px;">22</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-23" style="height: 20px;">23</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-24" style="height: 20px;">24</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-25" style="height: 20px;">25</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-26" style="height: 20px;">26</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-27" style="height: 20px;">27</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-28" style="height: 20px;">28</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-29" style="height: 20px;">29</div><div class="crayon-num" data-line="crayon-5e40dd3940c10849666417-30" style="height: 20px;">30</div></div>
</td>
<td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 20px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5e40dd3940c10849666417-1"><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-2"><span class="crayon-h"> </span><span class="crayon-s">"_id"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">"自动生成的ID"</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-3"><span class="crayon-h"> </span><span class="crayon-s">"_openid"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">"用户在当前小程序的openid"</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-4"><span class="crayon-h"> </span><span class="crayon-s">"nickName"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">"用户的昵称"</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-5"><span class="crayon-h"> </span><span class="crayon-s">"avatarUrl"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">"用户的头像链接"</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-6"><span class="crayon-h"> </span><span class="crayon-s">"albums"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-sy">[</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-7"><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-8"><span class="crayon-h"> </span><span class="crayon-s">"albumName"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">"相册名称"</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-9"><span class="crayon-h"> </span><span class="crayon-s">"coverURL"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">"相册封面地址"</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-10"><span class="crayon-h"> </span><span class="crayon-s">"photos"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-sy">[</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-11"><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-12"><span class="crayon-h"> </span><span class="crayon-s">"comments"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">"照片备注"</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-13"><span class="crayon-h"> </span><span class="crayon-s">"fileID"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">"照片的地址"</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-14"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-15"><span class="crayon-h"> </span><span class="crayon-sy">]</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-16"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-17"><span class="crayon-h"> </span><span class="crayon-sy">]</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-18"><span class="crayon-h"> </span><span class="crayon-s">"folders"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-sy">[</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-19"><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-20"><span class="crayon-h"> </span><span class="crayon-s">"folderName"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">"文件夹名称"</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-21"><span class="crayon-h"> </span><span class="crayon-s">"files"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-sy">[</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-22"><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-23"><span class="crayon-h"> </span><span class="crayon-s">"name"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">"文件名称"</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-24"><span class="crayon-h"> </span><span class="crayon-s">"fileID"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">"文件的地址"</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-25"><span class="crayon-h"> </span><span class="crayon-s">"comments"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">"文件备注"</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-26"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-27"><span class="crayon-h"> </span><span class="crayon-sy">]</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-28"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-29"><span class="crayon-h"> </span><span class="crayon-sy">]</span></div><div class="crayon-line" id="crayon-5e40dd3940c10849666417-30"><span class="crayon-sy">}</span></div></div></td>
</tr>
</tbody></table>
</div>
</div><p>如果是用关系型数据库,就会建user表来存储用户信息,albums表存储相册信息,folders表存储文件夹信息,photos表存储照片信息,files表存储文件信息,相信大家可以通过这个案例对云数据库是面向文档的有一个大致的了解。</p>
<blockquote><p>当然云开发的数据库也是可以把数据分散到不同集合的,需要视不同的情况而定,在后面章节我们会介绍。这种将每个文档所需的数据都嵌入到一个文档内部的做法,我们称之为<strong>反范式化</strong>(denormalization),将数据分散到多个不同的集合,不同集合之间相互引用称之为<strong>范式化</strong>(normalization),也就是说反范式化文档里包含子文档,而范式化呢,文档的子文档则是存储在另一个集合之中。</p></blockquote>
<p><strong>fileID是存储与数据库的纽带</strong></p>
<p>从上面可以看出,云存储与数据库就是<span style="color: #800000;"><strong>通过fileID来取得联系</strong></span>的,数据库<strong><span style="color: #008000;">只记录文件在云存储的fileID</span></strong>,我们可以访问数据库相应的fileID属性进行记录的增删改查操作,与此同时调用云存储的上传文件、下载文件、删除文件等API,这样云存储就被数据库给管理起来了。</p>
<p>打开云开发技术文档里云存储的所有API,如上传文件<a href="https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/storage/Cloud.uploadFile.html" target="_blank" rel="noopener noreferrer">uploadFile</a>、下载文件<a href="https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/storage/Cloud.downloadFile.html" target="_blank" rel="noopener noreferrer">downloadFile</a>、删除文件<a href="https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/storage/Cloud.deleteFile.html" target="_blank" rel="noopener noreferrer">deleteFile</a>、用云文件 ID 换取真实链接<a href="https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/storage/Cloud.getTempFileURL.html" target="_blank" rel="noopener noreferrer">getTempFileURL</a>,我们发现这些API始终是围绕fileID来展开的,要么fileID是success回调返回的对象,要么fileID是API必备的属性。</p>
<h4>建立用户与数据的关系</h4>
<p><strong>openid与云开发</strong></p>
<p>在前面我们已经了解到,用户在小程序里有着独一无二的openid,用openid完全可以区分用户;使用云开发时用户在小程序端上传文件到云存储,这个openid会被记录在文件信息里;添加数据到数据库这个openid会被保存在_openid的字段里(也就是说我们除了可以用云函数如前面的login来获取用户的openid,还可以通过数据库的_openid字段来获取openid);而且我们在小程序端查询数据时(查询时改、删、更新等的前提),都会默认有一个
<span id="crayon-5e40dd3940c18296881363" class="crayon-syntax crayon-syntax-inline crayon-theme-monokai crayon-theme-monokai-inline crayon-font-monaco" style="font-size: 14px !important; line-height: 20px !important;font-size: 14px !important;"><span class="crayon-pre crayon-code" style="font-size: 14px !important; line-height: 20px !important;font-size: 14px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-e">where</span><span class="crayon-sy">(</span><span class="crayon-sy">{</span><span class="crayon-v">_openid</span><span class="crayon-o">:</span>当前用户的<span class="crayon-v">openid</span><span class="crayon-sy">}</span><span class="crayon-sy">)</span></span></span>的条件,限制了用户write写(改、删、更新)的权限。</p>
<p><strong>_id与云开发</strong></p>
<p>当用户在小程序端往数据库用Collection.add添加记录document时,会自动给该记录生成_id,同时也会创建一个_openid,_id和_openid由于都是独一无二的,只要我们获取每个用户创建的记录_id,也就能同时确定这个用户的openid。</p>
<p><strong>判断用户是否存在并创建记录</strong></p>
<p>打开云开发控制台的<strong>数据库</strong>标签,新建一个clouddisk的集合,并修改它的权限为为“<strong>所有人可读,仅创建者可读写</strong>”(或使用安全规则)。使用开发者工具新建一个folder的页面,然后在folder.js的页面生命周期函数onLoad里输入以下代码:</p>
<div id="crayon-5e40dd3940c1b029752544" class="crayon-syntax crayon-theme-monokai crayon-font-monaco crayon-os-mac print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover disable-anim wrap" style="margin-top: 15px; margin-bottom: 15px; font-size: 14px !important; line-height: 20px !important; height: auto;">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" data-settings="" readonly="" style="tab-size: 4; font-size: 14px !important; line-height: 20px !important; z-index: 0; opacity: 0; overflow: hidden;">this.checkUser()</textarea></div>
<div class="crayon-main" style="position: relative; z-index: 1; overflow: hidden;">
<table class="crayon-table" style="margin-left: -20px;">
<tbody><tr class="crayon-row">
<td class="crayon-nums " data-settings="hide">
<div class="crayon-nums-content" style="font-size: 14px !important; line-height: 20px !important;"><div class="crayon-num" data-line="crayon-5e40dd3940c1b029752544-1" style="height: 20px;">1</div></div>
</td>
<td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 20px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5e40dd3940c1b029752544-1"><span class="crayon-r">this</span><span class="crayon-sy">.</span><span class="crayon-e">checkUser</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div></div></td>
</tr>
</tbody></table>
</div>
</div><p></p>
<blockquote><p>this调用自定义函数,开发者可以添加任意的函数或数据到
<span id="crayon-5e40dd3940c1d097018778" class="crayon-syntax crayon-syntax-inline crayon-theme-monokai crayon-theme-monokai-inline crayon-font-monaco" style="font-size: 14px !important; line-height: 20px !important;font-size: 14px !important;"><span class="crayon-pre crayon-code" style="font-size: 14px !important; line-height: 20px !important;font-size: 14px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-t">Object</span></span></span> 参数中,在页面的函数中用
<span id="crayon-5e40dd3940c1e335212051" class="crayon-syntax crayon-syntax-inline crayon-theme-monokai crayon-theme-monokai-inline crayon-font-monaco" style="font-size: 14px !important; line-height: 20px !important;font-size: 14px !important;"><span class="crayon-pre crayon-code" style="font-size: 14px !important; line-height: 20px !important;font-size: 14px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-r">this</span></span></span> 可以访问</p></blockquote>
<p>然后再在Page()对象里输入以下代码,代码的意思是如果clouddisk里没有用户创建的数据,那就在clouddisk里新增一条记录;如果有数据,就返回数据:</p>
<div id="crayon-5e40dd3940c20342236378" class="crayon-syntax crayon-theme-monokai crayon-font-monaco crayon-os-mac print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover disable-anim wrap" style="margin-top: 15px; margin-bottom: 15px; font-size: 14px !important; line-height: 20px !important; height: auto;">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" data-settings="" readonly="" style="tab-size: 4; font-size: 14px !important; line-height: 20px !important; z-index: 0; opacity: 0; overflow: hidden;"> async checkUser() {
//获取clouddisk是否有当前用户的数据,注意这里默认带了一个where({_openid:"当前用户的openid"})的条件
const userData = await db.collection('clouddisk').get()
console.log("当前用户的数据对象",userData)
//如果当前用户的数据data数组的长度为0,说明数据库里没有当前用户的数据
if(userData.data.length === 0){
//没有当前用户的数据,那就新建一个数据框架,其中_id和_openid会自动生成
return await db.collection('clouddisk').add({
data:{
//nickName和avatarUrl可以通过getUserInfo来获取,这里不多介绍
"nickName": "",
"avatarUrl": "",
"albums": [ ],
"folders": [ ]
}
})
}else{
this.setData({
userData
})
console.log('用户数据',userData)
}
},</textarea></div>
<div class="crayon-main" style="position: relative; z-index: 1; overflow: hidden;">
<table class="crayon-table" style="margin-left: -28px;">
<tbody><tr class="crayon-row">
<td class="crayon-nums " data-settings="hide">
<div class="crayon-nums-content" style="font-size: 14px !important; line-height: 20px !important;"><div class="crayon-num" data-line="crayon-5e40dd3940c20342236378-1" style="height: 20px;">1</div><div class="crayon-num" data-line="crayon-5e40dd3940c20342236378-2" style="height: 20px;">2</div><div class="crayon-num" data-line="crayon-5e40dd3940c20342236378-3" style="height: 20px;">3</div><div class="crayon-num" data-line="crayon-5e40dd3940c20342236378-4" style="height: 20px;">4</div><div class="crayon-num" data-line="crayon-5e40dd3940c20342236378-5" style="height: 20px;">5</div><div class="crayon-num" data-line="crayon-5e40dd3940c20342236378-6" style="height: 20px;">6</div><div class="crayon-num" data-line="crayon-5e40dd3940c20342236378-7" style="height: 20px;">7</div><div class="crayon-num" data-line="crayon-5e40dd3940c20342236378-8" style="height: 20px;">8</div><div class="crayon-num" data-line="crayon-5e40dd3940c20342236378-9" style="height: 20px;">9</div><div class="crayon-num" data-line="crayon-5e40dd3940c20342236378-10" style="height: 20px;">10</div><div class="crayon-num" data-line="crayon-5e40dd3940c20342236378-11" style="height: 20px;">11</div><div class="crayon-num" data-line="crayon-5e40dd3940c20342236378-12" style="height: 20px;">12</div><div class="crayon-num" data-line="crayon-5e40dd3940c20342236378-13" style="height: 20px;">13</div><div class="crayon-num" data-line="crayon-5e40dd3940c20342236378-14" style="height: 20px;">14</div><div class="crayon-num" data-line="crayon-5e40dd3940c20342236378-15" style="height: 20px;">15</div><div class="crayon-num" data-line="crayon-5e40dd3940c20342236378-16" style="height: 20px;">16</div><div class="crayon-num" data-line="crayon-5e40dd3940c20342236378-17" style="height: 20px;">17</div><div class="crayon-num" data-line="crayon-5e40dd3940c20342236378-18" style="height: 20px;">18</div><div class="crayon-num" data-line="crayon-5e40dd3940c20342236378-19" style="height: 20px;">19</div><div class="crayon-num" data-line="crayon-5e40dd3940c20342236378-20" style="height: 20px;">20</div><div class="crayon-num" data-line="crayon-5e40dd3940c20342236378-21" style="height: 20px;">21</div><div class="crayon-num" data-line="crayon-5e40dd3940c20342236378-22" style="height: 20px;">22</div><div class="crayon-num" data-line="crayon-5e40dd3940c20342236378-23" style="height: 20px;">23</div><div class="crayon-num" data-line="crayon-5e40dd3940c20342236378-24" style="height: 20px;">24</div></div>
</td>
<td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 20px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5e40dd3940c20342236378-1"><span class="crayon-h"> </span><span class="crayon-e">async </span><span class="crayon-e">checkUser</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c20342236378-2"><span class="crayon-h"> </span><span class="crayon-c">//获取clouddisk是否有当前用户的数据,注意这里默认带了一个where({_openid:"当前用户的openid"})的条件</span></div><div class="crayon-line" id="crayon-5e40dd3940c20342236378-3"><span class="crayon-h"> </span><span class="crayon-m">const</span><span class="crayon-h"> </span><span class="crayon-v">userData</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">await </span><span class="crayon-v">db</span><span class="crayon-sy">.</span><span class="crayon-e">collection</span><span class="crayon-sy">(</span><span class="crayon-s">'clouddisk'</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">get</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-h"> </span></div><div class="crayon-line" id="crayon-5e40dd3940c20342236378-4"><span class="crayon-h"> </span><span class="crayon-v">console</span><span class="crayon-sy">.</span><span class="crayon-e">log</span><span class="crayon-sy">(</span><span class="crayon-s">"当前用户的数据对象"</span><span class="crayon-sy">,</span><span class="crayon-v">userData</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c20342236378-5"> </div><div class="crayon-line" id="crayon-5e40dd3940c20342236378-6"><span class="crayon-h"> </span><span class="crayon-c">//如果当前用户的数据data数组的长度为0,说明数据库里没有当前用户的数据</span></div><div class="crayon-line" id="crayon-5e40dd3940c20342236378-7"><span class="crayon-h"> </span><span class="crayon-st">if</span><span class="crayon-sy">(</span><span class="crayon-v">userData</span><span class="crayon-sy">.</span><span class="crayon-v">data</span><span class="crayon-sy">.</span><span class="crayon-v">length</span><span class="crayon-h"> </span><span class="crayon-o">===</span><span class="crayon-h"> </span><span class="crayon-cn">0</span><span class="crayon-sy">)</span><span class="crayon-sy">{</span><span class="crayon-h"> </span></div><div class="crayon-line" id="crayon-5e40dd3940c20342236378-8"><span class="crayon-h"> </span><span class="crayon-c">//没有当前用户的数据,那就新建一个数据框架,其中_id和_openid会自动生成</span></div><div class="crayon-line" id="crayon-5e40dd3940c20342236378-9"><span class="crayon-h"> </span><span class="crayon-st">return</span><span class="crayon-h"> </span><span class="crayon-e">await </span><span class="crayon-v">db</span><span class="crayon-sy">.</span><span class="crayon-e">collection</span><span class="crayon-sy">(</span><span class="crayon-s">'clouddisk'</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">add</span><span class="crayon-sy">(</span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c20342236378-10"><span class="crayon-h"> </span><span class="crayon-v">data</span><span class="crayon-o">:</span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c20342236378-11"><span class="crayon-h"> </span><span class="crayon-c">//nickName和avatarUrl可以通过getUserInfo来获取,这里不多介绍</span></div><div class="crayon-line" id="crayon-5e40dd3940c20342236378-12"><span class="crayon-h"> </span><span class="crayon-s">"nickName"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">""</span><span class="crayon-sy">,</span><span class="crayon-h"> </span></div><div class="crayon-line" id="crayon-5e40dd3940c20342236378-13"><span class="crayon-h"> </span><span class="crayon-s">"avatarUrl"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">""</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="crayon-5e40dd3940c20342236378-14"><span class="crayon-h"> </span><span class="crayon-s">"albums"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-sy">[</span><span class="crayon-h"> </span><span class="crayon-sy">]</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="crayon-5e40dd3940c20342236378-15"><span class="crayon-h"> </span><span class="crayon-s">"folders"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-sy">[</span><span class="crayon-h"> </span><span class="crayon-sy">]</span></div><div class="crayon-line" id="crayon-5e40dd3940c20342236378-16"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line" id="crayon-5e40dd3940c20342236378-17"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c20342236378-18"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-st">else</span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c20342236378-19"><span class="crayon-h"> </span><span class="crayon-r">this</span><span class="crayon-sy">.</span><span class="crayon-e">setData</span><span class="crayon-sy">(</span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c20342236378-20"><span class="crayon-h"> </span><span class="crayon-i">userData</span></div><div class="crayon-line" id="crayon-5e40dd3940c20342236378-21"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c20342236378-22"><span class="crayon-h"> </span><span class="crayon-v">console</span><span class="crayon-sy">.</span><span class="crayon-e">log</span><span class="crayon-sy">(</span><span class="crayon-s">'用户数据'</span><span class="crayon-sy">,</span><span class="crayon-v">userData</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c20342236378-23"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line" id="crayon-5e40dd3940c20342236378-24"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">,</span></div></div></td>
</tr>
</tbody></table>
</div>
</div><p>一个用户只能创建一条记录,如果是开一个用户可以创建多条记录…</p>
<p>预先搭好文档的数据框架方便我们在后面以update的方式来更新数据。</p>
<h4>async/await的使用说明</h4>
<p>async 是“异步”的简写,async 用于申明一个 function 是异步的,而 await 用于等待一个异步方法执行完成,await 只能出现在 async 函数中。await 在 async 函数中才会有效。假设一个业务需要分步完成,每个步骤都是异步的,而且依赖上一步的执行结果,甚至依赖之前每一步的结果,就可以使用Async Await来完成</p>
<p>小程序端现在完全支持async/await的写法,不过需要在开发者工具-详情-本地设置,<strong>勾选增强编译</strong>才行,否则会报以下错误。</p>
<div id="crayon-5e40dd3940c22010369270" class="crayon-syntax crayon-theme-monokai crayon-font-monaco crayon-os-mac print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover disable-anim wrap" style="margin-top: 15px; margin-bottom: 15px; font-size: 14px !important; line-height: 20px !important; height: auto;">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" data-settings="" readonly="" style="tab-size: 4; font-size: 14px !important; line-height: 20px !important; z-index: 0; opacity: 0; overflow: hidden;">Uncaught ReferenceError: regeneratorRuntime is not defined</textarea></div>
<div class="crayon-main" style="position: relative; z-index: 1; overflow: hidden;">
<table class="crayon-table" style="margin-left: -20px;">
<tbody><tr class="crayon-row">
<td class="crayon-nums " data-settings="hide">
<div class="crayon-nums-content" style="font-size: 14px !important; line-height: 20px !important;"><div class="crayon-num" data-line="crayon-5e40dd3940c22010369270-1" style="height: 20px;">1</div></div>
</td>
<td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 20px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5e40dd3940c22010369270-1"><span class="crayon-e">Uncaught </span><span class="crayon-v">ReferenceError</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-e">regeneratorRuntime </span><span class="crayon-st">is</span><span class="crayon-h"> </span><span class="crayon-st">not</span><span class="crayon-h"> </span><span class="crayon-v">defined</span></div></div></td>
</tr>
</tbody></table>
</div>
</div><p>
<span id="crayon-5e40dd3940c23960894361" class="crayon-syntax crayon-syntax-inline crayon-theme-monokai crayon-theme-monokai-inline crayon-font-monaco" style="font-size: 14px !important; line-height: 20px !important;font-size: 14px !important;"><span class="crayon-pre crayon-code" style="font-size: 14px !important; line-height: 20px !important;font-size: 14px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-v">async</span></span></span> 函数返回值是 Promise 对象,
<span id="crayon-5e40dd3940c25488833002" class="crayon-syntax crayon-syntax-inline crayon-theme-monokai crayon-theme-monokai-inline crayon-font-monaco" style="font-size: 14px !important; line-height: 20px !important;font-size: 14px !important;"><span class="crayon-pre crayon-code" style="font-size: 14px !important; line-height: 20px !important;font-size: 14px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-v">async</span></span></span> 函数内部 return 返回的值。会成为
<span id="crayon-5e40dd3940c26441340981" class="crayon-syntax crayon-syntax-inline crayon-theme-monokai crayon-theme-monokai-inline crayon-font-monaco" style="font-size: 14px !important; line-height: 20px !important;font-size: 14px !important;"><span class="crayon-pre crayon-code" style="font-size: 14px !important; line-height: 20px !important;font-size: 14px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-st">then</span></span></span> 方法回调函数的参数。如果
<span id="crayon-5e40dd3940c28862419676" class="crayon-syntax crayon-syntax-inline crayon-theme-monokai crayon-theme-monokai-inline crayon-font-monaco" style="font-size: 14px !important; line-height: 20px !important;font-size: 14px !important;"><span class="crayon-pre crayon-code" style="font-size: 14px !important; line-height: 20px !important;font-size: 14px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-v">async</span></span></span> 函数内部抛出异常,则会导致返回的 Promise 对象状态变为
<span id="crayon-5e40dd3940c29159733326" class="crayon-syntax crayon-syntax-inline crayon-theme-monokai crayon-theme-monokai-inline crayon-font-monaco" style="font-size: 14px !important; line-height: 20px !important;font-size: 14px !important;"><span class="crayon-pre crayon-code" style="font-size: 14px !important; line-height: 20px !important;font-size: 14px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-v">reject</span></span></span> 状态。抛出的错误而会被
<span id="crayon-5e40dd3940c2a625403260" class="crayon-syntax crayon-syntax-inline crayon-theme-monokai crayon-theme-monokai-inline crayon-font-monaco" style="font-size: 14px !important; line-height: 20px !important;font-size: 14px !important;"><span class="crayon-pre crayon-code" style="font-size: 14px !important; line-height: 20px !important;font-size: 14px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-st">catch</span></span></span> 方法回调函数接收到。async 函数返回的 Promise 对象,必须等到内部所有的 await 命令的 Promise 对象执行完,才会发生状态改变。也就是说,只有当
<span id="crayon-5e40dd3940c2c867314019" class="crayon-syntax crayon-syntax-inline crayon-theme-monokai crayon-theme-monokai-inline crayon-font-monaco" style="font-size: 14px !important; line-height: 20px !important;font-size: 14px !important;"><span class="crayon-pre crayon-code" style="font-size: 14px !important; line-height: 20px !important;font-size: 14px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-v">async</span></span></span> 函数内部的异步操作都执行完,才会执行
<span id="crayon-5e40dd3940c2d623560895" class="crayon-syntax crayon-syntax-inline crayon-theme-monokai crayon-theme-monokai-inline crayon-font-monaco" style="font-size: 14px !important; line-height: 20px !important;font-size: 14px !important;"><span class="crayon-pre crayon-code" style="font-size: 14px !important; line-height: 20px !important;font-size: 14px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><span class="crayon-st">then</span></span></span> 方法的回调。</p>
<p>在async函数中使用await,那么await这里的代码就会变成同步的了,意思就是说只有等await后面的Promise执行完成得到结果才会继续下去,await就是等待,这样虽然避免了异步,但是它也会阻塞代码,所以使用的时候要考虑周全。await会阻塞代码,每个await都必须等后面的fn()执行完成才会执行下一行代码</p>
<h4>云存储文件夹管理</h4>
<p>在小程序端创建一个文件夹,需要考虑三个方面,一是文件夹在云存储里是怎么创建的;二是文件夹在数据库里的表现形式;三是小程序端页面应该怎么交互才算是创建了一个文件夹;</p>
<p><strong>文件夹在云存储里是怎么创建的</strong></p>
<p>在<strong>云开发能力</strong>章节我们了解到,要上传demo.jpg到云存储的cloudbase文件夹里,只需要指明cloudPath云存储的路径为cloudbase/demo.jpg即可,这里的cloudbase文件夹,在我们<span style="color: #800000;"><strong>上传文件时</strong></span>代码会自动创建,也就是说我们在<span style="color: #008000;"><strong>小程序端</strong></span><span style="color: #800000;"><strong>创建文件夹</strong></span>不需要对云存储做任何事情,因为<strong><span style="color: #008000;">在云存储这里,文件夹是只有在文件上传时才会创建</span></strong>。</p>
<p><strong>文件夹在数据库里的表现形式</strong></p>
<p>尽管文件夹在小程序端的页面交互看来非常复杂,但是它在数据库的形式看起来却非常简单,我们创建文件夹只是在操作(增删改查)数组和对象而已,以下的folders数组是文件夹列表,而一个文件夹只是数组里的一个对象而已。</p>
<div id="crayon-5e40dd3940c2f014046380" class="crayon-syntax crayon-theme-monokai crayon-font-monaco crayon-os-mac print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover disable-anim wrap" style="margin-top: 15px; margin-bottom: 15px; font-size: 14px !important; line-height: 20px !important; height: auto;">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" data-settings="" readonly="" style="tab-size: 4; font-size: 14px !important; line-height: 20px !important; z-index: 0; opacity: 0; overflow: hidden;">"folders": [
{
"folderName": "文件夹名称",
"files": [ ]
}
]</textarea></div>
<div class="crayon-main" style="position: relative; z-index: 1; overflow: hidden;">
<table class="crayon-table" style="margin-left: -20px;">
<tbody><tr class="crayon-row">
<td class="crayon-nums " data-settings="hide">
<div class="crayon-nums-content" style="font-size: 14px !important; line-height: 20px !important;"><div class="crayon-num" data-line="crayon-5e40dd3940c2f014046380-1" style="height: 20px;">1</div><div class="crayon-num" data-line="crayon-5e40dd3940c2f014046380-2" style="height: 20px;">2</div><div class="crayon-num" data-line="crayon-5e40dd3940c2f014046380-3" style="height: 20px;">3</div><div class="crayon-num" data-line="crayon-5e40dd3940c2f014046380-4" style="height: 20px;">4</div><div class="crayon-num" data-line="crayon-5e40dd3940c2f014046380-5" style="height: 20px;">5</div><div class="crayon-num" data-line="crayon-5e40dd3940c2f014046380-6" style="height: 20px;">6</div></div>
</td>
<td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 20px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5e40dd3940c2f014046380-1"><span class="crayon-s">"folders"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-sy">[</span></div><div class="crayon-line" id="crayon-5e40dd3940c2f014046380-2"><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c2f014046380-3"><span class="crayon-h"> </span><span class="crayon-s">"folderName"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">"文件夹名称"</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="crayon-5e40dd3940c2f014046380-4"><span class="crayon-h"> </span><span class="crayon-s">"files"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-sy">[</span><span class="crayon-h"> </span><span class="crayon-sy">]</span></div><div class="crayon-line" id="crayon-5e40dd3940c2f014046380-5"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line" id="crayon-5e40dd3940c2f014046380-6"><span class="crayon-h"> </span><span class="crayon-sy">]</span></div></div></td>
</tr>
</tbody></table>
</div>
</div><p><strong>文件夹的创建与页面交互</strong></p>
<p>通过前面的分析可知,在小程序端创建文件夹,只会操作数据库的数据,而不会操作云存储,我们来看具体的代码实现。使用开发者工具新建一个folder的页面,然后在folder.wxml里输入以下代码:</p>
<div id="crayon-5e40dd3940c31257701728" class="crayon-syntax crayon-theme-monokai crayon-font-monaco crayon-os-mac print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover disable-anim wrap" style="margin-top: 15px; margin-bottom: 15px; font-size: 14px !important; line-height: 20px !important; height: auto;">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" data-settings="" readonly="" style="tab-size: 4; font-size: 14px !important; line-height: 20px !important; z-index: 0; opacity: 0; overflow: hidden;"><form bindsubmit="formSubmit">
<input name="name" placeholder='请输入文件夹名' auto-focus value='{{inputValue}}' bindinput='keyInput'></input>
<button type="primary" formType="submit">新建文件夹</button>
</form></textarea></div>
<div class="crayon-main" style="position: relative; z-index: 1; overflow: hidden;">
<table class="crayon-table" style="margin-left: -20px;">
<tbody><tr class="crayon-row">
<td class="crayon-nums " data-settings="hide">
<div class="crayon-nums-content" style="font-size: 14px !important; line-height: 20px !important;"><div class="crayon-num" data-line="crayon-5e40dd3940c31257701728-1" style="height: 20px;">1</div><div class="crayon-num" data-line="crayon-5e40dd3940c31257701728-2" style="height: 20px;">2</div><div class="crayon-num" data-line="crayon-5e40dd3940c31257701728-3" style="height: 20px;">3</div><div class="crayon-num" data-line="crayon-5e40dd3940c31257701728-4" style="height: 20px;">4</div></div>
</td>
<td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 20px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5e40dd3940c31257701728-1"><span class="crayon-o"><</span><span class="crayon-e">form </span><span class="crayon-e ">bindsubmit</span><span class="crayon-o">=</span><span class="crayon-s">"formSubmit"</span><span class="crayon-o">></span></div><div class="crayon-line" id="crayon-5e40dd3940c31257701728-2"><span class="crayon-h"> </span><span class="crayon-o"><</span><span class="crayon-e">input </span><span class="crayon-r">name</span><span class="crayon-o">=</span><span class="crayon-s">"name"</span><span class="crayon-h"> </span><span class="crayon-e ">placeholder</span><span class="crayon-o">=</span><span class="crayon-s">'请输入文件夹名'</span><span class="crayon-h"> </span><span class="crayon-v">auto</span><span class="crayon-o">-</span><span class="crayon-r">focus</span><span class="crayon-h"> </span><span class="crayon-e ">value</span><span class="crayon-o">=</span><span class="crayon-s">'{{inputValue}}'</span><span class="crayon-h"> </span><span class="crayon-e ">bindinput</span><span class="crayon-o">=</span><span class="crayon-s">'keyInput'</span><span class="crayon-o">></span><span class="crayon-o"><</span><span class="crayon-o">/</span><span class="crayon-v">input</span><span class="crayon-o">></span></div><div class="crayon-line" id="crayon-5e40dd3940c31257701728-3"><span class="crayon-h"> </span><span class="crayon-o"><</span><span class="crayon-e">button </span><span class="crayon-e ">type</span><span class="crayon-o">=</span><span class="crayon-s">"primary"</span><span class="crayon-h"> </span><span class="crayon-e ">formType</span><span class="crayon-o">=</span><span class="crayon-s">"submit"</span><span class="crayon-o">></span>新建文件夹<span class="crayon-o"><</span><span class="crayon-o">/</span><span class="crayon-v">button</span><span class="crayon-o">></span></div><div class="crayon-line" id="crayon-5e40dd3940c31257701728-4"><span class="crayon-o"><</span><span class="crayon-o">/</span><span class="crayon-v">form</span><span class="crayon-o">></span></div></div></td>
</tr>
</tbody></table>
</div>
</div><p>方法一:使用push和</p>
<p>在folder.js里输入以下代码:</p>
<div id="crayon-5e40dd3940c33580937359" class="crayon-syntax crayon-theme-monokai crayon-font-monaco crayon-os-mac print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover disable-anim wrap" style="margin-top: 15px; margin-bottom: 15px; font-size: 14px !important; line-height: 20px !important; height: auto;">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" data-settings="" readonly="" style="tab-size: 4; font-size: 14px !important; line-height: 20px !important; z-index: 0; opacity: 0; overflow: hidden;"> async createFolder(e) {
let foldersName = e.detail.value.foldersName
const folders = this.data.userData.data[0].folders
folders.push({ foldersName: foldersName, files: [] })
const _id= this.data.userData.data[0]._id
return await db.collection('clouddisk').doc(_id).update({
data: {
folders: _.set(folders)
}
})
},</textarea></div>
<div class="crayon-main" style="position: relative; z-index: 1; overflow: hidden;">
<table class="crayon-table" style="margin-left: -28px;">
<tbody><tr class="crayon-row">
<td class="crayon-nums " data-settings="hide">
<div class="crayon-nums-content" style="font-size: 14px !important; line-height: 20px !important;"><div class="crayon-num" data-line="crayon-5e40dd3940c33580937359-1" style="height: 20px;">1</div><div class="crayon-num" data-line="crayon-5e40dd3940c33580937359-2" style="height: 20px;">2</div><div class="crayon-num" data-line="crayon-5e40dd3940c33580937359-3" style="height: 20px;">3</div><div class="crayon-num" data-line="crayon-5e40dd3940c33580937359-4" style="height: 20px;">4</div><div class="crayon-num" data-line="crayon-5e40dd3940c33580937359-5" style="height: 20px;">5</div><div class="crayon-num" data-line="crayon-5e40dd3940c33580937359-6" style="height: 20px;">6</div><div class="crayon-num" data-line="crayon-5e40dd3940c33580937359-7" style="height: 20px;">7</div><div class="crayon-num" data-line="crayon-5e40dd3940c33580937359-8" style="height: 20px;">8</div><div class="crayon-num" data-line="crayon-5e40dd3940c33580937359-9" style="height: 20px;">9</div><div class="crayon-num" data-line="crayon-5e40dd3940c33580937359-10" style="height: 20px;">10</div><div class="crayon-num" data-line="crayon-5e40dd3940c33580937359-11" style="height: 20px;">11</div></div>
</td>
<td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 20px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5e40dd3940c33580937359-1"><span class="crayon-h"> </span><span class="crayon-e">async </span><span class="crayon-e">createFolder</span><span class="crayon-sy">(</span><span class="crayon-v">e</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c33580937359-2"><span class="crayon-h"> </span><span class="crayon-e">let </span><span class="crayon-v">foldersName</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">e</span><span class="crayon-sy">.</span><span class="crayon-v">detail</span><span class="crayon-sy">.</span><span class="crayon-v">value</span><span class="crayon-sy">.</span><span class="crayon-e">foldersName</span></div><div class="crayon-line" id="crayon-5e40dd3940c33580937359-3"><span class="crayon-e"> </span><span class="crayon-m">const</span><span class="crayon-h"> </span><span class="crayon-v">folders</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-r">this</span><span class="crayon-sy">.</span><span class="crayon-v">data</span><span class="crayon-sy">.</span><span class="crayon-v">userData</span><span class="crayon-sy">.</span><span class="crayon-v">data</span><span class="crayon-sy">[</span><span class="crayon-cn">0</span><span class="crayon-sy">]</span><span class="crayon-sy">.</span><span class="crayon-e">folders</span></div><div class="crayon-line" id="crayon-5e40dd3940c33580937359-4"><span class="crayon-e"> </span><span class="crayon-v">folders</span><span class="crayon-sy">.</span><span class="crayon-e">push</span><span class="crayon-sy">(</span><span class="crayon-sy">{</span><span class="crayon-h"> </span><span class="crayon-v">foldersName</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">foldersName</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">files</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-sy">[</span><span class="crayon-sy">]</span><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c33580937359-5"><span class="crayon-h"> </span><span class="crayon-m">const</span><span class="crayon-h"> </span><span class="crayon-v">_id</span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-r">this</span><span class="crayon-sy">.</span><span class="crayon-v">data</span><span class="crayon-sy">.</span><span class="crayon-v">userData</span><span class="crayon-sy">.</span><span class="crayon-v">data</span><span class="crayon-sy">[</span><span class="crayon-cn">0</span><span class="crayon-sy">]</span><span class="crayon-sy">.</span><span class="crayon-e">_id</span></div><div class="crayon-line" id="crayon-5e40dd3940c33580937359-6"><span class="crayon-e"> </span><span class="crayon-st">return</span><span class="crayon-h"> </span><span class="crayon-e">await </span><span class="crayon-v">db</span><span class="crayon-sy">.</span><span class="crayon-e">collection</span><span class="crayon-sy">(</span><span class="crayon-s">'clouddisk'</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">doc</span><span class="crayon-sy">(</span><span class="crayon-v">_id</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">update</span><span class="crayon-sy">(</span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c33580937359-7"><span class="crayon-h"> </span><span class="crayon-v">data</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c33580937359-8"><span class="crayon-h"> </span><span class="crayon-v">folders</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">_</span><span class="crayon-sy">.</span><span class="crayon-e">set</span><span class="crayon-sy">(</span><span class="crayon-v">folders</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c33580937359-9"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line" id="crayon-5e40dd3940c33580937359-10"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c33580937359-11"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">,</span></div></div></td>
</tr>
</tbody></table>
</div>
</div><p><strong>技术文档:</strong><a href="https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/command/Command.set.html" target="_blank" rel="noopener noreferrer">字段更新操作符set</a></p>
<p>方法二:</p>
<p>在folder.js里输入以下代码:</p>
<div id="crayon-5e40dd3940c35867470456" class="crayon-syntax crayon-theme-monokai crayon-font-monaco crayon-os-mac print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover disable-anim wrap" style="margin-top: 15px; margin-bottom: 15px; font-size: 14px !important; line-height: 20px !important; height: auto;">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" data-settings="" readonly="" style="tab-size: 4; font-size: 14px !important; line-height: 20px !important; z-index: 0; opacity: 0; overflow: hidden;"> async createFolder(e) {
let foldersName = e.detail.value.foldersName
const _id= this.data.userData.data[0]._id
return await db.collection('clouddisk').doc(_id).update({
data: {
folders: _.push([{ foldersName: foldersName, files: [] }])
}
})
},</textarea></div>
<div class="crayon-main" style="position: relative; z-index: 1; overflow: hidden;">
<table class="crayon-table" style="margin-left: -20px;">
<tbody><tr class="crayon-row">
<td class="crayon-nums " data-settings="hide">
<div class="crayon-nums-content" style="font-size: 14px !important; line-height: 20px !important;"><div class="crayon-num" data-line="crayon-5e40dd3940c35867470456-1" style="height: 20px;">1</div><div class="crayon-num" data-line="crayon-5e40dd3940c35867470456-2" style="height: 20px;">2</div><div class="crayon-num" data-line="crayon-5e40dd3940c35867470456-3" style="height: 20px;">3</div><div class="crayon-num" data-line="crayon-5e40dd3940c35867470456-4" style="height: 20px;">4</div><div class="crayon-num" data-line="crayon-5e40dd3940c35867470456-5" style="height: 20px;">5</div><div class="crayon-num" data-line="crayon-5e40dd3940c35867470456-6" style="height: 20px;">6</div><div class="crayon-num" data-line="crayon-5e40dd3940c35867470456-7" style="height: 20px;">7</div><div class="crayon-num" data-line="crayon-5e40dd3940c35867470456-8" style="height: 20px;">8</div><div class="crayon-num" data-line="crayon-5e40dd3940c35867470456-9" style="height: 20px;">9</div></div>
</td>
<td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 20px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5e40dd3940c35867470456-1"><span class="crayon-h"> </span><span class="crayon-e">async </span><span class="crayon-e">createFolder</span><span class="crayon-sy">(</span><span class="crayon-v">e</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c35867470456-2"><span class="crayon-h"> </span><span class="crayon-e">let </span><span class="crayon-v">foldersName</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">e</span><span class="crayon-sy">.</span><span class="crayon-v">detail</span><span class="crayon-sy">.</span><span class="crayon-v">value</span><span class="crayon-sy">.</span><span class="crayon-e">foldersName</span></div><div class="crayon-line" id="crayon-5e40dd3940c35867470456-3"><span class="crayon-e"> </span><span class="crayon-m">const</span><span class="crayon-h"> </span><span class="crayon-v">_id</span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-r">this</span><span class="crayon-sy">.</span><span class="crayon-v">data</span><span class="crayon-sy">.</span><span class="crayon-v">userData</span><span class="crayon-sy">.</span><span class="crayon-v">data</span><span class="crayon-sy">[</span><span class="crayon-cn">0</span><span class="crayon-sy">]</span><span class="crayon-sy">.</span><span class="crayon-e">_id</span></div><div class="crayon-line" id="crayon-5e40dd3940c35867470456-4"><span class="crayon-e"> </span><span class="crayon-st">return</span><span class="crayon-h"> </span><span class="crayon-e">await </span><span class="crayon-v">db</span><span class="crayon-sy">.</span><span class="crayon-e">collection</span><span class="crayon-sy">(</span><span class="crayon-s">'clouddisk'</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">doc</span><span class="crayon-sy">(</span><span class="crayon-v">_id</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">update</span><span class="crayon-sy">(</span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c35867470456-5"><span class="crayon-h"> </span><span class="crayon-v">data</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c35867470456-6"><span class="crayon-h"> </span><span class="crayon-v">folders</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">_</span><span class="crayon-sy">.</span><span class="crayon-e">push</span><span class="crayon-sy">(</span><span class="crayon-sy">[</span><span class="crayon-sy">{</span><span class="crayon-h"> </span><span class="crayon-v">foldersName</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">foldersName</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">files</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-sy">[</span><span class="crayon-sy">]</span><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">]</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c35867470456-7"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line" id="crayon-5e40dd3940c35867470456-8"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c35867470456-9"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">,</span></div></div></td>
</tr>
</tbody></table>
</div>
</div><p><strong>技术文档:</strong><a href="https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/command/Command.push.html" target="_blank" rel="noopener noreferrer">数组更新操作符push</a></p>
<p><strong>先读后写与先写后读</strong></p>
<p> </p>
<h4>上传单个文件到文件夹</h4>
<p>相信大家都应该在其他小程序体验过文件上传的功能,在交互上这个功能虽然看起来简单,但是在代码的逻辑上却包含着四个关键步骤:</p>
<ol>
<li>首先把文件上传到小程序的临时文件,并获取临时文件地址以及文件的名称;</li>
<li>将临时文件上传到云存储指定云文件里,并q取到文件的FileID;</li>
<li>将文件在云存储的FileID和文件的名称上传到数据库;</li>
<li>获取文件夹内所有文件的信息。</li>
</ol>
<p><strong>上传文件到小程序的临时文件</strong></p>
<p>使用开发者工具在folder.wxml里输入以下代码:</p>
<div id="crayon-5e40dd3940c36425175146" class="crayon-syntax crayon-theme-monokai crayon-font-monaco crayon-os-mac print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover disable-anim wrap" style="margin-top: 15px; margin-bottom: 15px; font-size: 14px !important; line-height: 20px !important; height: auto;">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" data-settings="" readonly="" style="tab-size: 4; font-size: 14px !important; line-height: 20px !important; z-index: 0; opacity: 0; overflow: hidden;"><form bindsubmit="uploadFiles">
<button type="primary" bindtap="chooseMessageFile">选择文件</button>
<button type="primary" formType="submit">上传文件</button>
</form></textarea></div>
<div class="crayon-main" style="position: relative; z-index: 1; overflow: hidden;">
<table class="crayon-table" style="margin-left: -20px;">
<tbody><tr class="crayon-row">
<td class="crayon-nums " data-settings="hide">
<div class="crayon-nums-content" style="font-size: 14px !important; line-height: 20px !important;"><div class="crayon-num" data-line="crayon-5e40dd3940c36425175146-1" style="height: 20px;">1</div><div class="crayon-num" data-line="crayon-5e40dd3940c36425175146-2" style="height: 20px;">2</div><div class="crayon-num" data-line="crayon-5e40dd3940c36425175146-3" style="height: 20px;">3</div><div class="crayon-num" data-line="crayon-5e40dd3940c36425175146-4" style="height: 20px;">4</div></div>
</td>
<td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 20px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5e40dd3940c36425175146-1"><span class="crayon-r "><form </span><span class="crayon-e ">bindsubmit</span><span class="crayon-o">=</span><span class="crayon-s ">"uploadFiles"</span><span class="crayon-r ">></span><span class="crayon-i "> </span></div><div class="crayon-line" id="crayon-5e40dd3940c36425175146-2"><span class="crayon-i "> </span><span class="crayon-r "><button </span><span class="crayon-e ">type</span><span class="crayon-o">=</span><span class="crayon-s ">"primary"</span><span class="crayon-h"> </span><span class="crayon-e ">bindtap</span><span class="crayon-o">=</span><span class="crayon-s ">"chooseMessageFile"</span><span class="crayon-r ">></span><span class="crayon-i ">选择文件</span><span class="crayon-r "></button></span></div><div class="crayon-line" id="crayon-5e40dd3940c36425175146-3"><span class="crayon-i "> </span><span class="crayon-r "><button </span><span class="crayon-e ">type</span><span class="crayon-o">=</span><span class="crayon-s ">"primary"</span><span class="crayon-h"> </span><span class="crayon-e ">formType</span><span class="crayon-o">=</span><span class="crayon-s ">"submit"</span><span class="crayon-r ">></span><span class="crayon-i ">上传文件</span><span class="crayon-r "></button></span></div><div class="crayon-line" id="crayon-5e40dd3940c36425175146-4"><span class="crayon-r "></form></span></div></div></td>
</tr>
</tbody></table>
</div>
</div><p>然后在folder.js里输入以下代码:</p>
<div id="crayon-5e40dd3940c38708999472" class="crayon-syntax crayon-theme-monokai crayon-font-monaco crayon-os-mac print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover disable-anim wrap" style="margin-top: 15px; margin-bottom: 15px; font-size: 14px !important; line-height: 20px !important; height: auto;">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" data-settings="" readonly="" style="tab-size: 4; font-size: 14px !important; line-height: 20px !important; z-index: 0; opacity: 0; overflow: hidden;"> chooseMessageFile(){
const files = this.data.files
wx.chooseMessageFile({
count: 5,
success: res => {
console.log('选择文件之后的res',res)
let tempFilePaths = res.tempFiles
for (const tempFilePath of tempFilePaths) {
files.push({
src: tempFilePath.path,
name: tempFilePath.name
})
}
this.setData({ files: files })
console.log('选择文件之后的files', this.data.files)
}
})
},</textarea></div>
<div class="crayon-main" style="position: relative; z-index: 1; overflow: hidden;">
<table class="crayon-table" style="margin-left: -28px;">
<tbody><tr class="crayon-row">
<td class="crayon-nums " data-settings="hide">
<div class="crayon-nums-content" style="font-size: 14px !important; line-height: 20px !important;"><div class="crayon-num" data-line="crayon-5e40dd3940c38708999472-1" style="height: 20px;">1</div><div class="crayon-num" data-line="crayon-5e40dd3940c38708999472-2" style="height: 20px;">2</div><div class="crayon-num" data-line="crayon-5e40dd3940c38708999472-3" style="height: 20px;">3</div><div class="crayon-num" data-line="crayon-5e40dd3940c38708999472-4" style="height: 20px;">4</div><div class="crayon-num" data-line="crayon-5e40dd3940c38708999472-5" style="height: 20px;">5</div><div class="crayon-num" data-line="crayon-5e40dd3940c38708999472-6" style="height: 20px;">6</div><div class="crayon-num" data-line="crayon-5e40dd3940c38708999472-7" style="height: 20px;">7</div><div class="crayon-num" data-line="crayon-5e40dd3940c38708999472-8" style="height: 20px;">8</div><div class="crayon-num" data-line="crayon-5e40dd3940c38708999472-9" style="height: 20px;">9</div><div class="crayon-num" data-line="crayon-5e40dd3940c38708999472-10" style="height: 20px;">10</div><div class="crayon-num" data-line="crayon-5e40dd3940c38708999472-11" style="height: 20px;">11</div><div class="crayon-num" data-line="crayon-5e40dd3940c38708999472-12" style="height: 20px;">12</div><div class="crayon-num" data-line="crayon-5e40dd3940c38708999472-13" style="height: 20px;">13</div><div class="crayon-num" data-line="crayon-5e40dd3940c38708999472-14" style="height: 20px;">14</div><div class="crayon-num" data-line="crayon-5e40dd3940c38708999472-15" style="height: 20px;">15</div><div class="crayon-num" data-line="crayon-5e40dd3940c38708999472-16" style="height: 20px;">16</div><div class="crayon-num" data-line="crayon-5e40dd3940c38708999472-17" style="height: 20px;">17</div><div class="crayon-num" data-line="crayon-5e40dd3940c38708999472-18" style="height: 20px;">18</div></div>
</td>
<td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 20px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5e40dd3940c38708999472-1"><span class="crayon-h"> </span><span class="crayon-e">chooseMessageFile</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c38708999472-2"><span class="crayon-h"> </span><span class="crayon-m">const</span><span class="crayon-h"> </span><span class="crayon-v">files</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-r">this</span><span class="crayon-sy">.</span><span class="crayon-v">data</span><span class="crayon-sy">.</span><span class="crayon-e">files</span></div><div class="crayon-line" id="crayon-5e40dd3940c38708999472-3"><span class="crayon-e"> </span><span class="crayon-v">wx</span><span class="crayon-sy">.</span><span class="crayon-e">chooseMessageFile</span><span class="crayon-sy">(</span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c38708999472-4"><span class="crayon-h"> </span><span class="crayon-v">count</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">5</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="crayon-5e40dd3940c38708999472-5"><span class="crayon-h"> </span><span class="crayon-v">success</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">res</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-o">></span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c38708999472-6"><span class="crayon-h"> </span><span class="crayon-v">console</span><span class="crayon-sy">.</span><span class="crayon-e">log</span><span class="crayon-sy">(</span><span class="crayon-s">'选择文件之后的res'</span><span class="crayon-sy">,</span><span class="crayon-v">res</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c38708999472-7"><span class="crayon-h"> </span><span class="crayon-e">let </span><span class="crayon-v">tempFilePaths</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">res</span><span class="crayon-sy">.</span><span class="crayon-e">tempFiles</span></div><div class="crayon-line" id="crayon-5e40dd3940c38708999472-8"><span class="crayon-e"> </span><span class="crayon-st">for</span><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-m">const</span><span class="crayon-h"> </span><span class="crayon-e">tempFilePath </span><span class="crayon-e">of </span><span class="crayon-v">tempFilePaths</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c38708999472-9"><span class="crayon-h"> </span><span class="crayon-v">files</span><span class="crayon-sy">.</span><span class="crayon-e">push</span><span class="crayon-sy">(</span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c38708999472-10"><span class="crayon-h"> </span><span class="crayon-v">src</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">tempFilePath</span><span class="crayon-sy">.</span><span class="crayon-v">path</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="crayon-5e40dd3940c38708999472-11"><span class="crayon-h"> </span><span class="crayon-v">name</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">tempFilePath</span><span class="crayon-sy">.</span><span class="crayon-i">name</span></div><div class="crayon-line" id="crayon-5e40dd3940c38708999472-12"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c38708999472-13"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line" id="crayon-5e40dd3940c38708999472-14"><span class="crayon-h"> </span><span class="crayon-r">this</span><span class="crayon-sy">.</span><span class="crayon-e">setData</span><span class="crayon-sy">(</span><span class="crayon-sy">{</span><span class="crayon-h"> </span><span class="crayon-v">files</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-i">files</span><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c38708999472-15"><span class="crayon-h"> </span><span class="crayon-v">console</span><span class="crayon-sy">.</span><span class="crayon-e">log</span><span class="crayon-sy">(</span><span class="crayon-s">'选择文件之后的files'</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-r">this</span><span class="crayon-sy">.</span><span class="crayon-v">data</span><span class="crayon-sy">.</span><span class="crayon-v">files</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c38708999472-16"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line" id="crayon-5e40dd3940c38708999472-17"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c38708999472-18"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">,</span></div></div></td>
</tr>
</tbody></table>
</div>
</div><p><strong>将临时文件上传到云存储</strong></p>
<p><strong>技术文档:</strong><a href="https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/storage/uploadFile/client.uploadFile.html" target="_blank" rel="noopener noreferrer">wx.cloud.uploadFile</a></p>
<div id="crayon-5e40dd3940c3a701602711" class="crayon-syntax crayon-theme-monokai crayon-font-monaco crayon-os-mac print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover disable-anim wrap" style="margin-top: 15px; margin-bottom: 15px; font-size: 14px !important; line-height: 20px !important; height: auto;">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" data-settings="" readonly="" style="tab-size: 4; font-size: 14px !important; line-height: 20px !important; z-index: 0; opacity: 0; overflow: hidden;"> uploadFiles(e) {
const filePath = this.data.files[0].src
const cloudPath = `cloudbase/${Date.now()}-${Math.floor(Math.random(0, 1) * 1000)}` + filePath.match(/\.[^.]+?$/)
wx.cloud.uploadFile({
cloudPath,filePath
}).then(res => {
this.setData({
fileID:res.fileID
})
}).catch(error => {
console.log("文件上传失败",error)
})
},</textarea></div>
<div class="crayon-main" style="position: relative; z-index: 1; overflow: hidden;">
<table class="crayon-table" style="margin-left: -28px;">
<tbody><tr class="crayon-row">
<td class="crayon-nums " data-settings="hide">
<div class="crayon-nums-content" style="font-size: 14px !important; line-height: 20px !important;"><div class="crayon-num" data-line="crayon-5e40dd3940c3a701602711-1" style="height: 20px;">1</div><div class="crayon-num" data-line="crayon-5e40dd3940c3a701602711-2" style="height: 20px;">2</div><div class="crayon-num" data-line="crayon-5e40dd3940c3a701602711-3" style="height: 20px;">3</div><div class="crayon-num" data-line="crayon-5e40dd3940c3a701602711-4" style="height: 20px;">4</div><div class="crayon-num" data-line="crayon-5e40dd3940c3a701602711-5" style="height: 20px;">5</div><div class="crayon-num" data-line="crayon-5e40dd3940c3a701602711-6" style="height: 20px;">6</div><div class="crayon-num" data-line="crayon-5e40dd3940c3a701602711-7" style="height: 20px;">7</div><div class="crayon-num" data-line="crayon-5e40dd3940c3a701602711-8" style="height: 20px;">8</div><div class="crayon-num" data-line="crayon-5e40dd3940c3a701602711-9" style="height: 20px;">9</div><div class="crayon-num" data-line="crayon-5e40dd3940c3a701602711-10" style="height: 20px;">10</div><div class="crayon-num" data-line="crayon-5e40dd3940c3a701602711-11" style="height: 20px;">11</div><div class="crayon-num" data-line="crayon-5e40dd3940c3a701602711-12" style="height: 20px;">12</div><div class="crayon-num" data-line="crayon-5e40dd3940c3a701602711-13" style="height: 20px;">13</div></div>
</td>
<td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 20px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5e40dd3940c3a701602711-1"><span class="crayon-h"> </span><span class="crayon-e">uploadFiles</span><span class="crayon-sy">(</span><span class="crayon-v">e</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c3a701602711-2"><span class="crayon-h"> </span><span class="crayon-m">const</span><span class="crayon-h"> </span><span class="crayon-v">filePath</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-r">this</span><span class="crayon-sy">.</span><span class="crayon-v">data</span><span class="crayon-sy">.</span><span class="crayon-v">files</span><span class="crayon-sy">[</span><span class="crayon-cn">0</span><span class="crayon-sy">]</span><span class="crayon-sy">.</span><span class="crayon-e">src</span></div><div class="crayon-line" id="crayon-5e40dd3940c3a701602711-3"><span class="crayon-e"> </span><span class="crayon-m">const</span><span class="crayon-h"> </span><span class="crayon-v">cloudPath</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-sy">`</span><span class="crayon-e">cloudbase</span><span class="crayon-o">/</span><span class="crayon-sy">$</span><span class="crayon-sy">{</span><span class="crayon-v">Date</span><span class="crayon-sy">.</span><span class="crayon-e">now</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-sy">}</span><span class="crayon-o">-</span><span class="crayon-sy">$</span><span class="crayon-sy">{</span><span class="crayon-v">Math</span><span class="crayon-sy">.</span><span class="crayon-e">floor</span><span class="crayon-sy">(</span><span class="crayon-v">Math</span><span class="crayon-sy">.</span><span class="crayon-e">random</span><span class="crayon-sy">(</span><span class="crayon-cn">0</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-h"> </span><span class="crayon-cn">1000</span><span class="crayon-sy">)</span><span class="crayon-sy">}</span><span class="crayon-sy">`</span><span class="crayon-h"> </span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-v">filePath</span><span class="crayon-sy">.</span><span class="crayon-e">match</span><span class="crayon-sy">(</span><span class="crayon-o">/</span><span class="crayon-sy">\</span><span class="crayon-sy">.</span><span class="crayon-sy">[</span><span class="crayon-o">^</span><span class="crayon-sy">.</span><span class="crayon-sy">]</span><span class="crayon-o">+</span><span class="crayon-sy">?</span><span class="crayon-sy">$</span><span class="crayon-o">/</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c3a701602711-4"><span class="crayon-h"> </span><span class="crayon-v">wx</span><span class="crayon-sy">.</span><span class="crayon-v">cloud</span><span class="crayon-sy">.</span><span class="crayon-e">uploadFile</span><span class="crayon-sy">(</span><span class="crayon-sy">{</span><span class="crayon-h"> </span></div><div class="crayon-line" id="crayon-5e40dd3940c3a701602711-5"><span class="crayon-h"> </span><span class="crayon-v">cloudPath</span><span class="crayon-sy">,</span><span class="crayon-i">filePath</span></div><div class="crayon-line" id="crayon-5e40dd3940c3a701602711-6"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-st">then</span><span class="crayon-sy">(</span><span class="crayon-v">res</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-o">></span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c3a701602711-7"><span class="crayon-h"> </span><span class="crayon-r">this</span><span class="crayon-sy">.</span><span class="crayon-e">setData</span><span class="crayon-sy">(</span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c3a701602711-8"><span class="crayon-h"> </span><span class="crayon-v">fileID</span><span class="crayon-o">:</span><span class="crayon-v">res</span><span class="crayon-sy">.</span><span class="crayon-i">fileID</span></div><div class="crayon-line" id="crayon-5e40dd3940c3a701602711-9"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">)</span><span class="crayon-h"> </span></div><div class="crayon-line" id="crayon-5e40dd3940c3a701602711-10"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-st">catch</span><span class="crayon-sy">(</span><span class="crayon-v">error</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-o">></span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c3a701602711-11"><span class="crayon-h"> </span><span class="crayon-v">console</span><span class="crayon-sy">.</span><span class="crayon-e">log</span><span class="crayon-sy">(</span><span class="crayon-s">"文件上传失败"</span><span class="crayon-sy">,</span><span class="crayon-v">error</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c3a701602711-12"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c3a701602711-13"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">,</span></div></div></td>
</tr>
</tbody></table>
</div>
</div><p>上传成功后会获得文件唯一标识符,即文件 ID,后续操作都基于文件 ID 而不是 URL。</p>
<p><strong>将文件信息存储到数据库</strong></p>
<div id="crayon-5e40dd3940c3c556413139" class="crayon-syntax crayon-theme-monokai crayon-font-monaco crayon-os-mac print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover disable-anim wrap" style="margin-top: 15px; margin-bottom: 15px; font-size: 14px !important; line-height: 20px !important; height: auto;">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" data-settings="" readonly="" style="tab-size: 4; font-size: 14px !important; line-height: 20px !important; z-index: 0; opacity: 0; overflow: hidden;"> addFiles(fileID) {
const name = this.data.files[0].name
const _id= this.data.userData.data[0]._id
db.collection('clouddisk').doc(_id).update({
data: {
'folders.0.files': _.push({
"name":name,
"fileID":fileID
})
}
}).then(result => {
console.log("写入成功", result)
wx.navigateBack()
}
)
}</textarea></div>
<div class="crayon-main" style="position: relative; z-index: 1; overflow: hidden;">
<table class="crayon-table" style="margin-left: -28px;">
<tbody><tr class="crayon-row">
<td class="crayon-nums " data-settings="hide">
<div class="crayon-nums-content" style="font-size: 14px !important; line-height: 20px !important;"><div class="crayon-num" data-line="crayon-5e40dd3940c3c556413139-1" style="height: 20px;">1</div><div class="crayon-num" data-line="crayon-5e40dd3940c3c556413139-2" style="height: 20px;">2</div><div class="crayon-num" data-line="crayon-5e40dd3940c3c556413139-3" style="height: 20px;">3</div><div class="crayon-num" data-line="crayon-5e40dd3940c3c556413139-4" style="height: 20px;">4</div><div class="crayon-num" data-line="crayon-5e40dd3940c3c556413139-5" style="height: 20px;">5</div><div class="crayon-num" data-line="crayon-5e40dd3940c3c556413139-6" style="height: 20px;">6</div><div class="crayon-num" data-line="crayon-5e40dd3940c3c556413139-7" style="height: 20px;">7</div><div class="crayon-num" data-line="crayon-5e40dd3940c3c556413139-8" style="height: 20px;">8</div><div class="crayon-num" data-line="crayon-5e40dd3940c3c556413139-9" style="height: 20px;">9</div><div class="crayon-num" data-line="crayon-5e40dd3940c3c556413139-10" style="height: 20px;">10</div><div class="crayon-num" data-line="crayon-5e40dd3940c3c556413139-11" style="height: 20px;">11</div><div class="crayon-num" data-line="crayon-5e40dd3940c3c556413139-12" style="height: 20px;">12</div><div class="crayon-num" data-line="crayon-5e40dd3940c3c556413139-13" style="height: 20px;">13</div><div class="crayon-num" data-line="crayon-5e40dd3940c3c556413139-14" style="height: 20px;">14</div><div class="crayon-num" data-line="crayon-5e40dd3940c3c556413139-15" style="height: 20px;">15</div><div class="crayon-num" data-line="crayon-5e40dd3940c3c556413139-16" style="height: 20px;">16</div></div>
</td>
<td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 20px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5e40dd3940c3c556413139-1"><span class="crayon-h"> </span><span class="crayon-e">addFiles</span><span class="crayon-sy">(</span><span class="crayon-v">fileID</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c3c556413139-2"><span class="crayon-h"> </span><span class="crayon-m">const</span><span class="crayon-h"> </span><span class="crayon-r">name</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-r">this</span><span class="crayon-sy">.</span><span class="crayon-v">data</span><span class="crayon-sy">.</span><span class="crayon-v">files</span><span class="crayon-sy">[</span><span class="crayon-cn">0</span><span class="crayon-sy">]</span><span class="crayon-sy">.</span><span class="crayon-e">name</span></div><div class="crayon-line" id="crayon-5e40dd3940c3c556413139-3"><span class="crayon-e"> </span><span class="crayon-m">const</span><span class="crayon-h"> </span><span class="crayon-v">_id</span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-r">this</span><span class="crayon-sy">.</span><span class="crayon-v">data</span><span class="crayon-sy">.</span><span class="crayon-v">userData</span><span class="crayon-sy">.</span><span class="crayon-v">data</span><span class="crayon-sy">[</span><span class="crayon-cn">0</span><span class="crayon-sy">]</span><span class="crayon-sy">.</span><span class="crayon-e">_id</span></div><div class="crayon-line" id="crayon-5e40dd3940c3c556413139-4"><span class="crayon-e"> </span><span class="crayon-v">db</span><span class="crayon-sy">.</span><span class="crayon-e">collection</span><span class="crayon-sy">(</span><span class="crayon-s">'clouddisk'</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">doc</span><span class="crayon-sy">(</span><span class="crayon-v">_id</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">update</span><span class="crayon-sy">(</span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c3c556413139-5"><span class="crayon-h"> </span><span class="crayon-v">data</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c3c556413139-6"><span class="crayon-h"> </span><span class="crayon-s">'folders.0.files'</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">_</span><span class="crayon-sy">.</span><span class="crayon-e">push</span><span class="crayon-sy">(</span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c3c556413139-7"><span class="crayon-h"> </span><span class="crayon-s">"name"</span><span class="crayon-o">:</span><span class="crayon-v">name</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="crayon-5e40dd3940c3c556413139-8"><span class="crayon-h"> </span><span class="crayon-s">"fileID"</span><span class="crayon-o">:</span><span class="crayon-i">fileID</span></div><div class="crayon-line" id="crayon-5e40dd3940c3c556413139-9"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c3c556413139-10"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line" id="crayon-5e40dd3940c3c556413139-11"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-st">then</span><span class="crayon-sy">(</span><span class="crayon-v">result</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-o">></span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c3c556413139-12"><span class="crayon-h"> </span><span class="crayon-v">console</span><span class="crayon-sy">.</span><span class="crayon-e">log</span><span class="crayon-sy">(</span><span class="crayon-s">"写入成功"</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">result</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c3c556413139-13"><span class="crayon-h"> </span><span class="crayon-v">wx</span><span class="crayon-sy">.</span><span class="crayon-e">navigateBack</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c3c556413139-14"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line" id="crayon-5e40dd3940c3c556413139-15"><span class="crayon-h"> </span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c3c556413139-16"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div></div></td>
</tr>
</tbody></table>
</div>
</div><p>匹配数组第 n 项元素<br>
如果想找出数组字段中数组的第 n 个元素等于某个值的记录,那在 <key, value> 匹配中可以以 字段.下标 为 key,目标值为 value 来做匹配。如对上面的例子,如果想找出 number 字段第二项的值为 20 的记录,可以如下查询(注意:数组下标从 0 开始)</p>
<p><strong>获取文件夹内文件列表</strong></p>
<p>在onload生命周期函数里输入</p>
<div id="crayon-5e40dd3940c41084143944" class="crayon-syntax crayon-theme-monokai crayon-font-monaco crayon-os-mac print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover disable-anim wrap" style="margin-top: 15px; margin-bottom: 15px; font-size: 14px !important; line-height: 20px !important; height: auto;">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" data-settings="" readonly="" style="tab-size: 4; font-size: 14px !important; line-height: 20px !important; z-index: 0; opacity: 0; overflow: hidden;">this.getFiles()</textarea></div>
<div class="crayon-main" style="position: relative; z-index: 1; overflow: hidden;">
<table class="crayon-table" style="margin-left: -20px;">
<tbody><tr class="crayon-row">
<td class="crayon-nums " data-settings="hide">
<div class="crayon-nums-content" style="font-size: 14px !important; line-height: 20px !important;"><div class="crayon-num" data-line="crayon-5e40dd3940c41084143944-1" style="height: 20px;">1</div></div>
</td>
<td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 20px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5e40dd3940c41084143944-1"><span class="crayon-r">this</span><span class="crayon-sy">.</span><span class="crayon-e">getFiles</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div></div></td>
</tr>
</tbody></table>
</div>
</div><p>然后再在Page对象里添加getFiles()方法,获取该用户的数据</p>
<div id="crayon-5e40dd3940c43236418093" class="crayon-syntax crayon-theme-monokai crayon-font-monaco crayon-os-mac print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover disable-anim wrap" style="margin-top: 15px; margin-bottom: 15px; font-size: 14px !important; line-height: 20px !important; height: auto;">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" data-settings="" readonly="" style="tab-size: 4; font-size: 14px !important; line-height: 20px !important; z-index: 0; opacity: 0; overflow: hidden;"> getFiles(){
const _id= this.data.userData.data[0]._id
db.collection("clouddisk").doc(_id).get()
.then(res => {
console.log('用户数据',res.data)
})
.catch(err => {
console.error(err)
})
}</textarea></div>
<div class="crayon-main" style="position: relative; z-index: 1; overflow: hidden;">
<table class="crayon-table" style="margin-left: -28px;">
<tbody><tr class="crayon-row">
<td class="crayon-nums " data-settings="hide">
<div class="crayon-nums-content" style="font-size: 14px !important; line-height: 20px !important;"><div class="crayon-num" data-line="crayon-5e40dd3940c43236418093-1" style="height: 20px;">1</div><div class="crayon-num" data-line="crayon-5e40dd3940c43236418093-2" style="height: 20px;">2</div><div class="crayon-num" data-line="crayon-5e40dd3940c43236418093-3" style="height: 20px;">3</div><div class="crayon-num" data-line="crayon-5e40dd3940c43236418093-4" style="height: 20px;">4</div><div class="crayon-num" data-line="crayon-5e40dd3940c43236418093-5" style="height: 20px;">5</div><div class="crayon-num" data-line="crayon-5e40dd3940c43236418093-6" style="height: 20px;">6</div><div class="crayon-num" data-line="crayon-5e40dd3940c43236418093-7" style="height: 20px;">7</div><div class="crayon-num" data-line="crayon-5e40dd3940c43236418093-8" style="height: 20px;">8</div><div class="crayon-num" data-line="crayon-5e40dd3940c43236418093-9" style="height: 20px;">9</div><div class="crayon-num" data-line="crayon-5e40dd3940c43236418093-10" style="height: 20px;">10</div></div>
</td>
<td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 20px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5e40dd3940c43236418093-1"><span class="crayon-h"> </span><span class="crayon-e">getFiles</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c43236418093-2"><span class="crayon-h"> </span><span class="crayon-m">const</span><span class="crayon-h"> </span><span class="crayon-v">_id</span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-r">this</span><span class="crayon-sy">.</span><span class="crayon-v">data</span><span class="crayon-sy">.</span><span class="crayon-v">userData</span><span class="crayon-sy">.</span><span class="crayon-v">data</span><span class="crayon-sy">[</span><span class="crayon-cn">0</span><span class="crayon-sy">]</span><span class="crayon-sy">.</span><span class="crayon-e">_id</span></div><div class="crayon-line" id="crayon-5e40dd3940c43236418093-3"><span class="crayon-e"> </span><span class="crayon-v">db</span><span class="crayon-sy">.</span><span class="crayon-e">collection</span><span class="crayon-sy">(</span><span class="crayon-s">"clouddisk"</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">doc</span><span class="crayon-sy">(</span><span class="crayon-v">_id</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">get</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c43236418093-4"><span class="crayon-h"> </span><span class="crayon-sy">.</span><span class="crayon-st">then</span><span class="crayon-sy">(</span><span class="crayon-v">res</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-o">></span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c43236418093-5"><span class="crayon-h"> </span><span class="crayon-v">console</span><span class="crayon-sy">.</span><span class="crayon-e">log</span><span class="crayon-sy">(</span><span class="crayon-s">'用户数据'</span><span class="crayon-sy">,</span><span class="crayon-v">res</span><span class="crayon-sy">.</span><span class="crayon-v">data</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c43236418093-6"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c43236418093-7"><span class="crayon-h"> </span><span class="crayon-sy">.</span><span class="crayon-st">catch</span><span class="crayon-sy">(</span><span class="crayon-v">err</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-o">></span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c43236418093-8"><span class="crayon-h"> </span><span class="crayon-v">console</span><span class="crayon-sy">.</span><span class="crayon-e">error</span><span class="crayon-sy">(</span><span class="crayon-v">err</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c43236418093-9"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c43236418093-10"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div></div></td>
</tr>
</tbody></table>
</div>
</div><p><strong>要实际开发一个具体的功能,一定要先思考这个功能的页面交互是怎样的</strong>,而页面交互的背后都只不过是简单的数据,但正是这些简单的数据经过页面交互处理之后却“蒙蔽”了用户的双眼,让用户觉得复杂,觉得这个功能真实存在。</p>
<h4>嵌套数组和对象的查询</h4>
<p>我们可以对对象、对象中的元素、数组、数组中的元素进行匹配查询,甚至还可以对数组和对象相互嵌套的字段进行匹配查询/更新</p>
<p><strong>匹配记录中的嵌套字段</strong></p>
<div id="crayon-5e40dd3940c45357574895" class="crayon-syntax crayon-theme-monokai crayon-font-monaco crayon-os-mac print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover disable-anim wrap" style="margin-top: 15px; margin-bottom: 15px; font-size: 14px !important; line-height: 20px !important; height: auto;">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" data-settings="" readonly="" style="tab-size: 4; font-size: 14px !important; line-height: 20px !important; z-index: 0; opacity: 0; overflow: hidden;">// 方式一
db.collection('todos').where({
style: {
color: 'red'
}
}).get()
// 方式二
db.collection('todos').where({
'style.color': 'red'
}).get()</textarea></div>
<div class="crayon-main" style="position: relative; z-index: 1; overflow: hidden;">
<table class="crayon-table" style="margin-left: -28px;">
<tbody><tr class="crayon-row">
<td class="crayon-nums " data-settings="hide">
<div class="crayon-nums-content" style="font-size: 14px !important; line-height: 20px !important;"><div class="crayon-num" data-line="crayon-5e40dd3940c45357574895-1" style="height: 20px;">1</div><div class="crayon-num" data-line="crayon-5e40dd3940c45357574895-2" style="height: 20px;">2</div><div class="crayon-num" data-line="crayon-5e40dd3940c45357574895-3" style="height: 20px;">3</div><div class="crayon-num" data-line="crayon-5e40dd3940c45357574895-4" style="height: 20px;">4</div><div class="crayon-num" data-line="crayon-5e40dd3940c45357574895-5" style="height: 20px;">5</div><div class="crayon-num" data-line="crayon-5e40dd3940c45357574895-6" style="height: 20px;">6</div><div class="crayon-num" data-line="crayon-5e40dd3940c45357574895-7" style="height: 20px;">7</div><div class="crayon-num" data-line="crayon-5e40dd3940c45357574895-8" style="height: 20px;">8</div><div class="crayon-num" data-line="crayon-5e40dd3940c45357574895-9" style="height: 20px;">9</div><div class="crayon-num" data-line="crayon-5e40dd3940c45357574895-10" style="height: 20px;">10</div><div class="crayon-num" data-line="crayon-5e40dd3940c45357574895-11" style="height: 20px;">11</div></div>
</td>
<td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 20px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5e40dd3940c45357574895-1"><span class="crayon-c">// 方式一</span></div><div class="crayon-line" id="crayon-5e40dd3940c45357574895-2"><span class="crayon-v">db</span><span class="crayon-sy">.</span><span class="crayon-e">collection</span><span class="crayon-sy">(</span><span class="crayon-s">'todos'</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">where</span><span class="crayon-sy">(</span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c45357574895-3"><span class="crayon-h"> </span><span class="crayon-v">style</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c45357574895-4"><span class="crayon-h"> </span><span class="crayon-v">color</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">'red'</span></div><div class="crayon-line" id="crayon-5e40dd3940c45357574895-5"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line" id="crayon-5e40dd3940c45357574895-6"><span class="crayon-sy">}</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">get</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c45357574895-7"> </div><div class="crayon-line" id="crayon-5e40dd3940c45357574895-8"><span class="crayon-c">// 方式二</span></div><div class="crayon-line" id="crayon-5e40dd3940c45357574895-9"><span class="crayon-v">db</span><span class="crayon-sy">.</span><span class="crayon-e">collection</span><span class="crayon-sy">(</span><span class="crayon-s">'todos'</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">where</span><span class="crayon-sy">(</span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c45357574895-10"><span class="crayon-h"> </span><span class="crayon-s">'style.color'</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">'red'</span></div><div class="crayon-line" id="crayon-5e40dd3940c45357574895-11"><span class="crayon-sy">}</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">get</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div></div></td>
</tr>
</tbody></table>
</div>
</div><p><strong>匹配并更新数组中的元素</strong></p>
<h4>上传多个文件到文件夹</h4>
<p> </p>
<h4>查询所有数据</h4>
<p></p>
<div id="crayon-5e40dd3940c46079744121" class="crayon-syntax crayon-theme-monokai crayon-font-monaco crayon-os-mac print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover disable-anim wrap" style="margin-top: 15px; margin-bottom: 15px; font-size: 14px !important; line-height: 20px !important; height: auto;">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" data-settings="" readonly="" style="tab-size: 4; font-size: 14px !important; line-height: 20px !important; z-index: 0; opacity: 0; overflow: hidden;">const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database()
const MAX_LIMIT = 100
exports.main = async (event, context) => {
// 先取出集合记录总数
const countResult = await db.collection('china').count()
const total = countResult.total
// 计算需分几次取
const batchTimes = Math.ceil(total / 100)
// 承载所有读操作的 promise 的数组
const tasks = []
for (let i = 0; i < batchTimes; i++) {
const promise = db.collection('china').skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
tasks.push(promise)
}
// 等待所有
return (await Promise.all(tasks)).reduce((acc, cur) => {
return {
data: acc.data.concat(cur.data),
errMsg: acc.errMsg,
}
})
}</textarea></div>
<div class="crayon-main" style="position: relative; z-index: 1; overflow: hidden;">
<table class="crayon-table" style="margin-left: -28px;">
<tbody><tr class="crayon-row">
<td class="crayon-nums " data-settings="hide">
<div class="crayon-nums-content" style="font-size: 14px !important; line-height: 20px !important;"><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-1" style="height: 20px;">1</div><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-2" style="height: 20px;">2</div><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-3" style="height: 20px;">3</div><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-4" style="height: 20px;">4</div><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-5" style="height: 20px;">5</div><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-6" style="height: 20px;">6</div><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-7" style="height: 20px;">7</div><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-8" style="height: 20px;">8</div><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-9" style="height: 20px;">9</div><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-10" style="height: 20px;">10</div><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-11" style="height: 20px;">11</div><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-12" style="height: 20px;">12</div><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-13" style="height: 20px;">13</div><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-14" style="height: 20px;">14</div><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-15" style="height: 20px;">15</div><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-16" style="height: 20px;">16</div><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-17" style="height: 20px;">17</div><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-18" style="height: 20px;">18</div><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-19" style="height: 20px;">19</div><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-20" style="height: 20px;">20</div><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-21" style="height: 20px;">21</div><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-22" style="height: 20px;">22</div><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-23" style="height: 20px;">23</div><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-24" style="height: 20px;">24</div><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-25" style="height: 20px;">25</div><div class="crayon-num" data-line="crayon-5e40dd3940c46079744121-26" style="height: 20px;">26</div></div>
</td>
<td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 20px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5e40dd3940c46079744121-1"><span class="crayon-m">const</span><span class="crayon-h"> </span><span class="crayon-v">cloud</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">require</span><span class="crayon-sy">(</span><span class="crayon-s">'wx-server-sdk'</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c46079744121-2"><span class="crayon-v">cloud</span><span class="crayon-sy">.</span><span class="crayon-e">init</span><span class="crayon-sy">(</span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c46079744121-3"><span class="crayon-h"> </span><span class="crayon-v">env</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">cloud</span><span class="crayon-sy">.</span><span class="crayon-v">DYNAMIC_CURRENT</span><span class="crayon-sy">_</span>ENV</div><div class="crayon-line" id="crayon-5e40dd3940c46079744121-4"><span class="crayon-sy">}</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c46079744121-5"><span class="crayon-m">const</span><span class="crayon-h"> </span><span class="crayon-v">db</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">cloud</span><span class="crayon-sy">.</span><span class="crayon-e">database</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c46079744121-6"><span class="crayon-m">const</span><span class="crayon-h"> </span><span class="crayon-v">MAX_LIMIT</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-cn">100</span></div><div class="crayon-line" id="crayon-5e40dd3940c46079744121-7"><span class="crayon-v">exports</span><span class="crayon-sy">.</span><span class="crayon-v">main</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">async</span><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-v">event</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">context</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-o">></span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c46079744121-8"><span class="crayon-h"> </span><span class="crayon-c">// 先取出集合记录总数</span></div><div class="crayon-line" id="crayon-5e40dd3940c46079744121-9"><span class="crayon-h"> </span><span class="crayon-m">const</span><span class="crayon-h"> </span><span class="crayon-v">countResult</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">await </span><span class="crayon-v">db</span><span class="crayon-sy">.</span><span class="crayon-e">collection</span><span class="crayon-sy">(</span><span class="crayon-s">'china'</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">count</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c46079744121-10"><span class="crayon-h"> </span><span class="crayon-m">const</span><span class="crayon-h"> </span><span class="crayon-v">total</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">countResult</span><span class="crayon-sy">.</span><span class="crayon-v">total</span></div><div class="crayon-line" id="crayon-5e40dd3940c46079744121-11"><span class="crayon-h"> </span><span class="crayon-c">// 计算需分几次取</span></div><div class="crayon-line" id="crayon-5e40dd3940c46079744121-12"><span class="crayon-h"> </span><span class="crayon-m">const</span><span class="crayon-h"> </span><span class="crayon-v">batchTimes</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">Math</span><span class="crayon-sy">.</span><span class="crayon-e">ceil</span><span class="crayon-sy">(</span><span class="crayon-v">total</span><span class="crayon-h"> </span><span class="crayon-o">/</span><span class="crayon-h"> </span><span class="crayon-cn">100</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c46079744121-13"><span class="crayon-h"> </span><span class="crayon-c">// 承载所有读操作的 promise 的数组</span></div><div class="crayon-line" id="crayon-5e40dd3940c46079744121-14"><span class="crayon-h"> </span><span class="crayon-m">const</span><span class="crayon-h"> </span><span class="crayon-v">tasks</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-sy">[</span><span class="crayon-sy">]</span></div><div class="crayon-line" id="crayon-5e40dd3940c46079744121-15"><span class="crayon-h"> </span><span class="crayon-st">for</span><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-i">let</span><span class="crayon-h"> </span><span class="crayon-v">i</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-cn">0</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-v">i</span><span class="crayon-h"> </span><span class="crayon-o"><</span><span class="crayon-h"> </span><span class="crayon-v">batchTimes</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-v">i</span><span class="crayon-o">++</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c46079744121-16"><span class="crayon-h"> </span><span class="crayon-m">const</span><span class="crayon-h"> </span><span class="crayon-v">promise</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">db</span><span class="crayon-sy">.</span><span class="crayon-e">collection</span><span class="crayon-sy">(</span><span class="crayon-s">'china'</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">skip</span><span class="crayon-sy">(</span><span class="crayon-v">i</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-h"> </span><span class="crayon-v">MAX_LIMIT</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">limit</span><span class="crayon-sy">(</span><span class="crayon-v">MAX_LIMIT</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">get</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c46079744121-17"><span class="crayon-h"> </span><span class="crayon-v">tasks</span><span class="crayon-sy">.</span><span class="crayon-e">push</span><span class="crayon-sy">(</span><span class="crayon-v">promise</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c46079744121-18"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line" id="crayon-5e40dd3940c46079744121-19"><span class="crayon-h"> </span><span class="crayon-c">// 等待所有</span></div><div class="crayon-line" id="crayon-5e40dd3940c46079744121-20"><span class="crayon-h"> </span><span class="crayon-st">return</span><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-e">await </span><span class="crayon-v">Promise</span><span class="crayon-sy">.</span><span class="crayon-e">all</span><span class="crayon-sy">(</span><span class="crayon-v">tasks</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">reduce</span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-v">acc</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">cur</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-o">></span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c46079744121-21"><span class="crayon-h"> </span><span class="crayon-st">return</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c46079744121-22"><span class="crayon-h"> </span><span class="crayon-v">data</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">acc</span><span class="crayon-sy">.</span><span class="crayon-v">data</span><span class="crayon-sy">.</span><span class="crayon-e">concat</span><span class="crayon-sy">(</span><span class="crayon-v">cur</span><span class="crayon-sy">.</span><span class="crayon-v">data</span><span class="crayon-sy">)</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="crayon-5e40dd3940c46079744121-23"><span class="crayon-h"> </span><span class="crayon-v">errMsg</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">acc</span><span class="crayon-sy">.</span><span class="crayon-v">errMsg</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="crayon-5e40dd3940c46079744121-24"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line" id="crayon-5e40dd3940c46079744121-25"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c46079744121-26"><span class="crayon-sy">}</span></div></div></td>
</tr>
</tbody></table>
</div>
</div><p></p>
<h4>小程序端下载并预览文件</h4>
<p>技术文档:<a href="https://developers.weixin.qq.com/miniprogram/dev/api/file/wx.openDocument.html" target="_blank" rel="noopener noreferrer">wx.openDocument()</a>、<a href="https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/storage/downloadFile/client.downloadFile.html" target="_blank" rel="noopener noreferrer">wx.cloud.downloadFile</a></p>
<p>使用云开发来下载云存储里面的文件,就不会有域名校验备案的问题</p>
<div id="crayon-5e40dd3940c48890958508" class="crayon-syntax crayon-theme-monokai crayon-font-monaco crayon-os-mac print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover disable-anim wrap" style="margin-top: 15px; margin-bottom: 15px; font-size: 14px !important; line-height: 20px !important; height: auto;">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" data-settings="" readonly="" style="tab-size: 4; font-size: 14px !important; line-height: 20px !important; z-index: 0; opacity: 0; overflow: hidden;"> previewFile(){
wx.cloud.downloadFile({
fileID: 'cloud://xly-xrlur.786c-xly-xrlur-1300446086/cloudbase/技术工坊预备手册.pdf'
}).then(res => {
const filePath = res.tempFilePath
wx.openDocument({
filePath: filePath
})
}).catch(error => {
console.log(error)
})
}</textarea></div>
<div class="crayon-main" style="position: relative; z-index: 1; overflow: hidden;">
<table class="crayon-table" style="margin-left: -28px;">
<tbody><tr class="crayon-row">
<td class="crayon-nums " data-settings="hide">
<div class="crayon-nums-content" style="font-size: 14px !important; line-height: 20px !important;"><div class="crayon-num" data-line="crayon-5e40dd3940c48890958508-1" style="height: 20px;">1</div><div class="crayon-num" data-line="crayon-5e40dd3940c48890958508-2" style="height: 20px;">2</div><div class="crayon-num" data-line="crayon-5e40dd3940c48890958508-3" style="height: 20px;">3</div><div class="crayon-num" data-line="crayon-5e40dd3940c48890958508-4" style="height: 20px;">4</div><div class="crayon-num" data-line="crayon-5e40dd3940c48890958508-5" style="height: 20px;">5</div><div class="crayon-num" data-line="crayon-5e40dd3940c48890958508-6" style="height: 20px;">6</div><div class="crayon-num" data-line="crayon-5e40dd3940c48890958508-7" style="height: 20px;">7</div><div class="crayon-num" data-line="crayon-5e40dd3940c48890958508-8" style="height: 20px;">8</div><div class="crayon-num" data-line="crayon-5e40dd3940c48890958508-9" style="height: 20px;">9</div><div class="crayon-num" data-line="crayon-5e40dd3940c48890958508-10" style="height: 20px;">10</div><div class="crayon-num" data-line="crayon-5e40dd3940c48890958508-11" style="height: 20px;">11</div><div class="crayon-num" data-line="crayon-5e40dd3940c48890958508-12" style="height: 20px;">12</div></div>
</td>
<td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 20px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5e40dd3940c48890958508-1"><span class="crayon-h"> </span><span class="crayon-e">previewFile</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c48890958508-2"><span class="crayon-h"> </span><span class="crayon-v">wx</span><span class="crayon-sy">.</span><span class="crayon-v">cloud</span><span class="crayon-sy">.</span><span class="crayon-e">downloadFile</span><span class="crayon-sy">(</span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c48890958508-3"><span class="crayon-h"> </span><span class="crayon-v">fileID</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-s">'cloud://xly-xrlur.786c-xly-xrlur-1300446086/cloudbase/技术工坊预备手册.pdf'</span></div><div class="crayon-line" id="crayon-5e40dd3940c48890958508-4"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-st">then</span><span class="crayon-sy">(</span><span class="crayon-v">res</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-o">></span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c48890958508-5"><span class="crayon-h"> </span><span class="crayon-m">const</span><span class="crayon-h"> </span><span class="crayon-v">filePath</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">res</span><span class="crayon-sy">.</span><span class="crayon-e">tempFilePath</span></div><div class="crayon-line" id="crayon-5e40dd3940c48890958508-6"><span class="crayon-e"> </span><span class="crayon-v">wx</span><span class="crayon-sy">.</span><span class="crayon-e">openDocument</span><span class="crayon-sy">(</span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c48890958508-7"><span class="crayon-h"> </span><span class="crayon-v">filePath</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-i">filePath</span></div><div class="crayon-line" id="crayon-5e40dd3940c48890958508-8"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c48890958508-9"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-st">catch</span><span class="crayon-sy">(</span><span class="crayon-v">error</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-o">></span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c48890958508-10"><span class="crayon-h"> </span><span class="crayon-v">console</span><span class="crayon-sy">.</span><span class="crayon-e">log</span><span class="crayon-sy">(</span><span class="crayon-v">error</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c48890958508-11"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c48890958508-12"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div></div></td>
</tr>
</tbody></table>
</div>
</div><p></p>
<h4>删除记录与删除字段</h4>
<p><strong>技术文档:</strong><a href="https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/storage/Cloud.deleteFile.html" target="_blank" rel="noopener noreferrer">deleteFile</a></p>
<p>可以根据文件 ID 下载文件,用户仅可下载其有访问权限的文件:</p>
<div id="crayon-5e40dd3940c4a522871573" class="crayon-syntax crayon-theme-monokai crayon-font-monaco crayon-os-mac print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover disable-anim wrap" style="margin-top: 15px; margin-bottom: 15px; font-size: 14px !important; line-height: 20px !important; height: auto;">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" data-settings="" readonly="" style="tab-size: 4; font-size: 14px !important; line-height: 20px !important; z-index: 0; opacity: 0; overflow: hidden;">const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
exports.main = async (event, context) => {
const fileIDs = ['xxx', 'xxx']
const result = await cloud.deleteFile({
fileList: fileIDs,
})
return result.fileList
}</textarea></div>
<div class="crayon-main" style="position: relative; z-index: 1; overflow: hidden;">
<table class="crayon-table" style="margin-left: -28px;">
<tbody><tr class="crayon-row">
<td class="crayon-nums " data-settings="hide">
<div class="crayon-nums-content" style="font-size: 14px !important; line-height: 20px !important;"><div class="crayon-num" data-line="crayon-5e40dd3940c4a522871573-1" style="height: 20px;">1</div><div class="crayon-num" data-line="crayon-5e40dd3940c4a522871573-2" style="height: 20px;">2</div><div class="crayon-num" data-line="crayon-5e40dd3940c4a522871573-3" style="height: 20px;">3</div><div class="crayon-num" data-line="crayon-5e40dd3940c4a522871573-4" style="height: 20px;">4</div><div class="crayon-num" data-line="crayon-5e40dd3940c4a522871573-5" style="height: 20px;">5</div><div class="crayon-num" data-line="crayon-5e40dd3940c4a522871573-6" style="height: 20px;">6</div><div class="crayon-num" data-line="crayon-5e40dd3940c4a522871573-7" style="height: 20px;">7</div><div class="crayon-num" data-line="crayon-5e40dd3940c4a522871573-8" style="height: 20px;">8</div><div class="crayon-num" data-line="crayon-5e40dd3940c4a522871573-9" style="height: 20px;">9</div><div class="crayon-num" data-line="crayon-5e40dd3940c4a522871573-10" style="height: 20px;">10</div><div class="crayon-num" data-line="crayon-5e40dd3940c4a522871573-11" style="height: 20px;">11</div><div class="crayon-num" data-line="crayon-5e40dd3940c4a522871573-12" style="height: 20px;">12</div></div>
</td>
<td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 20px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5e40dd3940c4a522871573-1"><span class="crayon-m">const</span><span class="crayon-h"> </span><span class="crayon-v">cloud</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">require</span><span class="crayon-sy">(</span><span class="crayon-s">'wx-server-sdk'</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c4a522871573-2"><span class="crayon-v">cloud</span><span class="crayon-sy">.</span><span class="crayon-e">init</span><span class="crayon-sy">(</span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c4a522871573-3"><span class="crayon-h"> </span><span class="crayon-v">env</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">cloud</span><span class="crayon-sy">.</span><span class="crayon-v">DYNAMIC_CURRENT</span><span class="crayon-sy">_</span>ENV</div><div class="crayon-line" id="crayon-5e40dd3940c4a522871573-4"><span class="crayon-sy">}</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c4a522871573-5"> </div><div class="crayon-line" id="crayon-5e40dd3940c4a522871573-6"><span class="crayon-v">exports</span><span class="crayon-sy">.</span><span class="crayon-v">main</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">async</span><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-v">event</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">context</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-o">></span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c4a522871573-7"><span class="crayon-h"> </span><span class="crayon-m">const</span><span class="crayon-h"> </span><span class="crayon-v">fileIDs</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-sy">[</span><span class="crayon-s">'xxx'</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-s">'xxx'</span><span class="crayon-sy">]</span></div><div class="crayon-line" id="crayon-5e40dd3940c4a522871573-8"><span class="crayon-h"> </span><span class="crayon-m">const</span><span class="crayon-h"> </span><span class="crayon-v">result</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">await </span><span class="crayon-v">cloud</span><span class="crayon-sy">.</span><span class="crayon-e">deleteFile</span><span class="crayon-sy">(</span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c4a522871573-9"><span class="crayon-h"> </span><span class="crayon-v">fileList</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">fileIDs</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="crayon-5e40dd3940c4a522871573-10"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c4a522871573-11"><span class="crayon-h"> </span><span class="crayon-st">return</span><span class="crayon-h"> </span><span class="crayon-v">result</span><span class="crayon-sy">.</span><span class="crayon-i">fileList</span></div><div class="crayon-line" id="crayon-5e40dd3940c4a522871573-12"><span class="crayon-sy">}</span></div></div></td>
</tr>
</tbody></table>
</div>
</div><p><strong>嵌套删除字段</strong></p>
<div id="crayon-5e40dd3940c4c793447428" class="crayon-syntax crayon-theme-monokai crayon-font-monaco crayon-os-mac print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover disable-anim wrap" style="margin-top: 15px; margin-bottom: 15px; font-size: 14px !important; line-height: 20px !important; height: auto;">
<div class="crayon-plain-wrap"><textarea class="crayon-plain print-no" data-settings="" readonly="" style="tab-size: 4; font-size: 14px !important; line-height: 20px !important; z-index: 0; opacity: 0; overflow: hidden;"> return await db.collection("clouddisk").doc("_id").update({
data:{
"folders.0.files.1": _.remove()
}
})</textarea></div>
<div class="crayon-main" style="position: relative; z-index: 1; overflow: hidden;">
<table class="crayon-table" style="margin-left: -20px;">
<tbody><tr class="crayon-row">
<td class="crayon-nums " data-settings="hide">
<div class="crayon-nums-content" style="font-size: 14px !important; line-height: 20px !important;"><div class="crayon-num" data-line="crayon-5e40dd3940c4c793447428-1" style="height: 20px;">1</div><div class="crayon-num" data-line="crayon-5e40dd3940c4c793447428-2" style="height: 20px;">2</div><div class="crayon-num" data-line="crayon-5e40dd3940c4c793447428-3" style="height: 20px;">3</div><div class="crayon-num" data-line="crayon-5e40dd3940c4c793447428-4" style="height: 20px;">4</div><div class="crayon-num" data-line="crayon-5e40dd3940c4c793447428-5" style="height: 20px;">5</div></div>
</td>
<td class="crayon-code"><div class="crayon-pre" style="font-size: 14px !important; line-height: 20px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-5e40dd3940c4c793447428-1"><span class="crayon-h"> </span><span class="crayon-st">return</span><span class="crayon-h"> </span><span class="crayon-e">await </span><span class="crayon-v">db</span><span class="crayon-sy">.</span><span class="crayon-e">collection</span><span class="crayon-sy">(</span><span class="crayon-s">"clouddisk"</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">doc</span><span class="crayon-sy">(</span><span class="crayon-s">"_id"</span><span class="crayon-sy">)</span><span class="crayon-sy">.</span><span class="crayon-e">update</span><span class="crayon-sy">(</span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c4c793447428-2"><span class="crayon-h"> </span><span class="crayon-v">data</span><span class="crayon-o">:</span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-5e40dd3940c4c793447428-3"><span class="crayon-h"> </span><span class="crayon-s">"folders.0.files.1"</span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">_</span><span class="crayon-sy">.</span><span class="crayon-e">remove</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-5e40dd3940c4c793447428-4"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line" id="crayon-5e40dd3940c4c793447428-5"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-sy">)</span></div></div></td>
</tr>
</tbody></table>
</div>
</div><p></p>
<h4>获取临时链接并分享文件</h4>
<p><strong>技术文档:</strong><a href="https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/storage/Cloud.getTempFileURL.html" target="_blank" rel="noopener noreferrer">getTempFileURL</a></p>
<h4>将服务端的文件传到小程序端</h4>
<p><strong>技术文档:</strong><a href="https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/storage/downloadFile/server.downloadFile.html" target="_blank" rel="noopener noreferrer">downloadFile</a></p>
<p> </p>
<div class="sop-footer">
<hr><p><a href="https://www.zhihu.com/people/lidongyx" target="_blank">李东bbsky</a>:致力于互联网技术技能的普及。Tell me and I forget . Teach me and I remember. Involve me and I learn. </p>
</div>
</div><!-- #post-## -->
<!-- <div class="sop-bottom">
<span class="sop-bottom-tip">想要更系统的指导和一起学习的伙伴,欢迎加入:</span>
<a target="_blank" class="sop-more" href="https://h5.youzan.com/v2/goods/361m5sscp7awc">线上学习社区</a>
<span class="sop-bottom-tip">进群加微信:jishuzu360</span>
</div> -->
</div><!-- #content -->
</div><!-- #primary -->
<link rel="stylesheet" id="crayon-css" href="https://tcb-1251009918.cos.ap-guangzhou.myqcloud.com/pc/cdn/wp-content/plugins/crayon-syntax-highlighter/css/min/crayon.min.css?ver=_2.7.2_beta" type="text/css" media="all">
<script type="text/javascript" src="https://tcb-1251009918.cos.ap-guangzhou.myqcloud.com/pc/cdn/wp-includes/js/comment-reply.min.js?ver=5.2.2"></script>
<script type="text/javascript" src="https://tcb-1251009918.cos.ap-guangzhou.myqcloud.com/pc/cdn/wp-content/themes/twentyfourteen/js/functions.js?ver=20150315"></script>
<script type="text/javascript" src="https://tcb-1251009918.cos.ap-guangzhou.myqcloud.com/pc/cdn/wp-includes/js/wp-embed.min.js?ver=5.2.2"></script>
<script type="text/javascript">
/* <![CDATA[ */
var CrayonSyntaxSettings = {"version":"_2.7.2_beta","is_admin":"0","ajaxurl":"https:\/\/cloudbasegroup.org\/wp-admin\/admin-ajax.php","prefix":"crayon-","setting":"crayon-setting","selected":"crayon-setting-selected","changed":"crayon-setting-changed","special":"crayon-setting-special","orig_value":"data-orig-value","debug":""};
var CrayonSyntaxStrings = {"copy":"Press %s to Copy, %s to Paste","minimize":"Click To Expand Code"};
/* ]]> */
</script>
<script type="text/javascript" src="https://tcb-1251009918.cos.ap-guangzhou.myqcloud.com/pc/cdn/wp-content/plugins/crayon-syntax-highlighter/js/min/crayon.min.js?ver=_2.7.2_beta"></script>
<script src="https://hackweek.oss-cn-shanghai.aliyuncs.com/hw18/component/jquery.min.js"></script>
<script src="https://hackweek.oss-cn-shanghai.aliyuncs.com/hw18/component/bootstrap.min.js"></script>
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?8efc2c9aaaffb2f7a4cf6a7ff9c65cbb";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
</body></html>