From b44bba0a50518bcad5e2153a8ff45b2b22395da3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Kaczmarek?= <12432719+AN0DA@users.noreply.github.com> Date: Sun, 29 Jun 2025 11:58:11 +0200 Subject: [PATCH] 1.1 --- mongo.pdf | Bin 61759 -> 62016 bytes mongo.tex | 19 +- skrypt.js | 619 ++++++++++++++++++++++++++++++++++++++++++++++++------ 3 files changed, 563 insertions(+), 75 deletions(-) diff --git a/mongo.pdf b/mongo.pdf index e0001f305680b334d63ba3c08cfbf1dc2501cfe8..043c96351820d10ce2b73d42eb0a5352054ee296 100644 GIT binary patch delta 28952 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ν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

n>0r2}cFXaXhujHJ4 zxHTKk{&(<4{l%)q*0_v227}O-zB(Rp zl$XFq=rA}TkE9hKTqt7V`iDt&3ExcUGD%;;BoAsot2nM7uC0tELC^hmi1G)$UWq)yl`&t>48M@gfBg#@vk7j1 z0Z)AGc@uiwo_}i57aTDAj&C_yv}>cXuCheG&domUP`M#GziY2uk&uVq>#<=6#x!fc zJU&-nU(hg|B2liEmLuZahk(okD1Clrw`eZ@P zoIrel-ty9)beuadWM7h-+Quc$y7sK(uu@m!=#8a9hJH;Yf4?73?qtL_jFElesqt(329bUPKnSOG^IMM1^wX>*(UgR8K#dn?l;U3$ibA3baQ5WrQpVxoE`n*GSRDVZh& zW4k=Mz`8waqR6qH&RZR2nQ4J57B;^|7K&}*05};ns?~;rvI)LC#GO=Lo)|)-1I}6x zbJ$n?tglNFn9soD`^(~82o!5sn>LV#zTsy<7rNSsr}3(r1=(j$Xn2@2D2Wd$ z;z}ti*+==(+3bmr{oI_tS&BSH$I8&w7>ySmsOoZf1fUc6Cwv`@Db*kiw)34~DOzBd z4F80lJfdW_(vQ9~CCrK6H67s&9oH&a(L8{g?Y{z#Ye(d0Ov2lAroNDyFCrUpR0v!3 z&B}4x2Y4FF$RNcwTY2`PZN7^-HUX>nZUEW@?P?VKRjesc3IOF_Pq-3c7${muB_Ce& zc+91#D>)Dk{K%T7a?^mco3&keJ5tAk>ULnMY^sy4#)VS%LPnF(fL>}d>u-a6(*zA< z=6`VU5$8l(B%A_4Czzpz$35DzgB=g+vL-JwhV%z%w$D6&1zOFf0Q{Xc+oFXHw(Xqt zxASq|9UMMs@!NTQq};%RyLk;}q)pavxf5etJM?!O!XfW!TKy1R;f!&p;uh|kp`S(K z1B`VjsIqGj&pHRqdX_&pnL_|m@@mosh1hhHG=(cBEq_(l57cS^!tdkM=S4>U5v9aJ zf{&MU*NcnP47QZ5e4L`!hR}$Bzk#Nfy;ShB!^VlqPaPw@X`@bhlL|Hj*EVxTKFioJ zMM!9CB5E;MUt~XB>?oI1n{pq|uRX++0i-r%z}51ey3P4{RrlDh>a*_oPjvXaiLc`y ze3qFH4!#*CpnZrhRfhkbSTSA@QAir(72AzZpd;gts8kAQh~Lf)XOpI$Y<`m~BEVpp zt!zMwXi)Ndex?e-CjZXA>9@(mr*uaJl>{t%6b0#>m? zVotQ9m!%45WpzS^(c3O4pNS~>R%WSq;c!YO25+3+-Ya?Qa|vV^&{Qa%^Cm>%-CFQ) z-L_0YJznLG(4f$ln=$H&eYqMI5rJt@)hRB7ZkhrJY53l{Q`xPZZR|4nT2324o6Qe& z5Nt7Hl#-5wLRm~yliIu>(kMoN0F*=_HhflPC3T7TVo+EyIyl9U?K{aoA?$+zelnSM zTn>{Pf8S8yb=*TN7=whu`tOYkl3SW(x!0t1@oWj0-jqIcdb zo^T+lJ;Ts92)DNoOFYi1tz8BnyD6Wv;RbHp6|66w+pdB0IIo;)DFB3{x4W%-l{+~S|V+v$UnC2D&s6u-a~eM5nMJMi%7t>!X<;vkXye=%Rj|9KqS5}cr9b!th#wf1xzSu1?cDfI=o zcB14rNIxD3Cxo*Lb1PB!^)5ACaTT|rK_#y<|#rv+eJ|crK_X8KSj;G zHrGWfSO)guHga-+m2RS6_owZL`~d$?Ox7icrETr%X^oGs=i{*c2eP`S2Uej1LRgvE zc6j}t?+=flgVMiAkh79cuAtSzaM+>6LNk9ry_mDSvC)QzBqzX14Y5%{20a7E@{O={ z1hK-x`X=7Ms}v?3)FaRbd0qt}elyInu+nFr8SX~>4D1^LP(R8PBEA^)S`5cpHkb z!yrH`9`zT!j$>16w#p#93=k;RJ#zyAvi&v7G43?vy3=8uXVSG8d9zvdKP*7`y#gVb zwZgfZEJK6<{W1fJQ0k8J-piIdrFKrg{3=j0HyZfg%pb0Avd+p7`wsBRs^gn?9ybJH zJMTwRL($iTxhI2{ip(nM`MrS%4R+;TNzh4ix4K||WJ0SBQ`#Il1=)PCT`~)IFk}0> z&34!ow+H!b;x{yOV_m&zV((%hFIaSbsgR@iJzNREp`O5ZYggJX#_Ca@`RqVtRxZX# zD!+qKGG;7o0V{FAudD9Q=V-j&WUYWhB9c5JKGLhE?#0KWrkLdF7M18Ef5^1x6%xUy z`M)Y?5x1u6&0#FGC>**fga zu%`C$+Q*5W@YMlJk4zXI{vN6L(bq9u^1YDSmVb3mcB?HHivqfVkrWNLE@T$ZhKnKz z(ruiYhm;koup7!nF@D7kl%b!@S6^1W)M+w6=QR1Z9lXvsWy+NZ(en-uabqBu?}WI3 znJA9;@Ju&?@u(2F4-YK&TPRNR#1iH5l?zUmj{!-cO$yXs{VKH{{teWhq+FEr0i)l< z-&hey{ti`en9&_4HUOny;`t#k&Ujceb3K4}j~HA`$vN=-Isr1O1U-mzO74j!bl(cF z17le2ncwE~0;9OOR>-}tYj)!_gMFl)xp{>3mC#tBVCGb;IEqbf5ePz8a5ah58s-3Y z|273oGJxZ>(qM@1h&0s9Oq4^_0FzLm2CXA12#7NtO~;Na+Tt!qZ%<4JwkH5Ssu5e$ z%L>`Bt4Wa1mQb>iLdRQSjogMH2XO(2b9APW$7iDklB*py0skq5x1a`X6I^!#^|#_8 zSt^baN0HVaTSFCI1-6l4IWX-7Y419l=5z}XWbxi_jhgH4usIQsA*=|{udYWqstuAq zgabiIcoZxYg_`&*Ts#N+3gi-vKFTC3%C<@nQ$4BZW?#D2fgJY}y&km!vsM7`OJh-D zqkl05S)cBXljId{D`OxFGlY1x8ayyH;31%S+(|ngDAEW`UU57iGp{OsHArL80D6qs zB+6vAsC>-pQ>U#5;Bz4%NX?Ub5`GhsU|h>FM6OS^`5QDz_c$m773@gJfVzFzOFewg zlHj_la!{zJ+5R?-F@y`xh};13E&Uy{WFc`+W~O>KO8-Q}Iw4%ed*@sbYlmw8^_JY1 zb#}7+bbEN@jhC6RMgB2bRp-yY=rY#UX(>Q(Eftk4gY_cVkhEyKQ>IJF`Bc0W?+fL< z&2+mNXDeHR&Bg4{Dk5^}ZMs9r?bErlpwK)|6hD9CVgw$gI~R_M%o_ldlO2#^SZ^^7 z+k*2Z8}pmx3|Ix5^N-hacQ`Bb&oG&ih0KVm)M(e_;x?f``7u;$-|69Caev^4;o}ET z>(ww`n2n)BN+>~(RuV>|_R%=Rm77cV@(xvxi5Xm3b#s4NmIo$@nY`A0Y+?9UgF-SmzeNKSAWJ+ehWV z#jp3C{py$ZZGDC@?`35bD$L*O#vm_&_2EZ4L=a)!MZ+Gy*;#07T_t04ee@pIfRe=`x zlXYyWpa|DuXi%vLw@o*dWrLz!7-mgwfIwZrI*C_l!8%}?mC926Ny=6|9@L=87$N%2UVC;_#{MWX7$Rlp2$?IX55yk{3zeKb*4)&Z}l!2RWl&F+D7` zP+hRS*(%TVP@UiVgBX8g?9W=YRRsOBLrK zuWfnyF>`^{^Yaju%Ha-m_lK3zL1h*AFE~o6PC$85pd6Np_|H?>FYr|YmSN*1Ge0eW znUm{(&s(?uTQwl%Kh0b6{@uQOm?ezSk{mX4^y;Rk zJVXO;%n6F(rmJ23?Xm>K?tksB=BM2nr0-&eGOZm0CZ)uhc=6D&G<%jTis2R>HXm+} zPX~DaD2YM-xre9>YPMNHYibdhx$TT)F1;F|0^WtvB|C99 zQ=50OO*}W`2UfhEI-{sO&E3c&-bS{?kK*rhRnI-9jU_B^=}FVnEG}UNGUB8;3Ze-; zrF6#}yj1Z4G9Lf|zY=X?E8hv<6C=S^h8ym-#B#z8gny1)B9f_&GOBON;uun=DnFus zr?V@`=ECYPjvLvYC5(?*DnFR{`l`?38C|hE%A$^7ApRWKs(rw$+H2jzz%t;N3ADYa zQ7OhSR7Fev>*^6KzBj}AEFYWHR!Y}+3cg!;u6&y#gUJWDZ+Dm||5(RyP?NO=F%(Wl z^miZg);(;Dg!P6#LNi$eb3vBRlX?*RIU~4eS8OUtk_pYKSU$gu*rG3!V>Se3)vxSR z39-j=(K*(Z&>tJq#vZ$(tc+pF-SMEceHNRv>c~+zF*{4!IX%-w5tDC|sfV;7ccd^C zSmS?3!_xss0|{c}11rvaGU??e?I!ccvhAr4tDSnan!rI~N&*Wuj<9Zf|0!8N-(X{B zvp6W{=!n1zK&e+>q*h)cUGBLu42i6X52^u8yXS}dDmSo)*Lu0^adg%wq~1DBWuv$8 z`J-n8$MX<@Gw!y^yU2R}?tFT~OS?P!hu)vvnV=9Ly8U9!42xxf9*x986E86nwa&{3 z^^uJ}+)rl3o9u1Pf<2W@Jd5XtB&}8`2F77N@zDGGQUCjOxO)E7o_3K$>C!5)*mUDJ zQ+N1>=HVRGb*R+_mF4jXP@`Tfp_lb$tq>1kIz?!@3lX9)p?z3Mo6sWscNgGoYHkn z=%WQ2muq)FvyOfVJ8PG6+b#;>Y5zhk{LvBr^-|Uma@to#siIm%H^@6NzAB8~s z*Iyx?=VBhf0u`2)bRbDRSlwvF2QkvF+&5hX)KA7@G$L_lPXDwylD(pFG1pPawbR7a z_!3r<>S{(%TWt7Mp$2{#mo~~jR7L=s2}Ft&9xXWt_U2g+Z<)%bKa_2T<3O;tnAHmy zqD`t_VgKuEP9F!-Bxb~UePZr&(k6hyxVGQQV;dd3}?nc zZ%*yB)Yrm2C7Or+n-y%V@UJ{bA=_bt3e&`(@yIVO)3`j>colkBv##+*M6e!^_H_yp ziYnF(0)v|IsI&cVZ8QD@i818-BW$EfRG~^QEZEF4JUkx6s_J1rQjma7aGiquj(}}Z z+q+4jGwE(sXn1>JMAeR8ab_Bs6v!hlqYZZ<6B@>YkPZ`BDwFDiN!GS16XS{K%t0MZ zA_}=ejgPQOEg>j~ssmY+qVx_>@0}L(OK?n=j(GcoZnpK!4MKzOgT{}Wf}lTiYp4~D z@D@vFicvMrPji$S(_549s*avdb8>@#9T6))VgFhnOLYG7{s7~bH7{0~3Wl3?ON{{X z@1lTHnT`{@f6P0t_79_TD#Sb|S%1L2$#YlIS1iW^IUx()QB21b$MrSfsq)y8{w}B2 zOAhhX=DVj1a6JkHyh-6!n(B(!Q+%0R z4KApGAjBB55=Ph%P_Z1ysd5-zXGH(DnRT`4g{`ncu`}XNK;hfQ7l>uVe{$LJzVC!> z^C@dcovZTV5-})-ov1P&EvAKX*(WdnOnsn*HCAcGXT0gY$G<*DDETETz{pEV%B<^h zD@|}B+0o#fv0_iTHj$%`yYE!!@SEmC`n((*O*$mwZA;_|aMYjf7DH>Jt_9J=S**DX zpUK8WIdcrm8#y)e25sj? z5=CS4-Nz?C}fs_g3%qkP5*SztrtLy5B-Rn)!yg zOlf>*kn9Cgx{Rz=peE>*A^ zzd%*&kUMMj2(^Z|CJacQb2Rx`uzr0L79(^@JzO0DJatmiJG>OZCT?n9C}lG2xRXRB z;%3Q9`>dN}cIKbXq_9w9WrB=X_>z~5mSt%8I@i1|enkE1!#BV@X~&;p4)J`no375? zRVuE-s@53!K%_p-Nkn8lGT70qw@LM$+C!(}>T2qy7_x!xF-^M&C33W@pZ+dX193Y< z=kaowuqTIXGRN0M^VVW2vgur#Qi}@AjtVxzYz{_&$>v_;nW4$^{;{R&WS*C^Ov+Bhi zkGY$~Irq;aQMKrDGn3kPvoN!$&DW}Q)tm@fKx0$jd3Se~f$(sS^WP01`o6RC_hU5)58amuZ^H_rmc+5>Oc92FWFK$ke%*c;Vp$3bwm`f)q$apdEH;$d*i|Fv#V zdY%p8+$dSZi?~nbY%>}+qq3OfuoYP(*TCDpc9ljMKj!wEdkJPAZt_`sU)fHF`AEjZ zY#{YdFcYMN(}YHl8pwr7j^m zd6AK5=0>4vs+2gq#dczt7;ScNleM`Ng(O8Gq*75pZN{mB@;BPC|DB>%!%uH+)4v7t zHa!$t2T$E;J8Ng&ZobS(yL;dhbTIf0>OaD0$!}Kd06CkG|3Uf_#br+&O}M>nFBGEQ zNwm~*w&5cyj;ooBbl4BrC7U3?ksM%ooPl)6NEf4S3%t{j*(eCigDrJRYAl7qN6-ax z0*O&+Oaz=usv@1BE9IMtLIE}^{22%ZDzxK7hsJwGjCzo}9ct6xz~DaB{PfU-8=SOQ zCrts4bYcv|a-acoY4_u2;O@1u?r(d>23dtC#sPZS9Q+GY(%X)rMno_TQ?1df&*i3^ z)WS-rOoj>KFQy6lSK}aPR|Y?A>TZ1BXX{um<^QjF z(WnFz6tcf^I&9ZF(41O-jT1x=-d|xKqMgdqV{hG7SnHZlKe>rjn=lON34>DdprWmWT2xTLT|ak)}hHvXn1v`3D6?nk2fkQH{2P zZvn&g{ymI=wvO)Rb%*^G=|rsPx)fcn<=^AYCnzJrA&OY;DCAV@CmC<@n#9 zKfRQB>qAB)vE6TUZ(FS>`tdY8sIZ}b#B=Tbv@`4|L4?Cq07m$$R!Vf&U9#6)i=6K%b@QhI=Izwz;>>GIy$1xT^A9 zLv*I~w>lfosLbWD7Gcu8J-3xoiUzhQX)GXRAPexHtzsgcu|zs}f@mVm58G^wb(n9JqH@2win-R1M!f_{hX$PrSC`Aj| zI90Yh#Q<9kgXV|-NNQkFH?)vFv-p4!7Jx_9wJEo_%TyVsumOLDSW7}4fGoBh=#I`A zoZ(q}t-YVmevF+r`8Qh~a8ka%zCk79(kA4#VFHx67aBkNajFA1%DijS##PT#>acsL zYcoW~@pro!;?d`iMN)T!;iilv2r`(PHdtP6+ct-(-_DpjLR5|!rGDrz?zup>x7qc%mz*-IZ?H^Yo!o0tMO@r# zO$sl)H|t{&c=FBz3(SZJeo5r7M%Ql^ zHiKC_ff49C@zsCi3Qmj)BqlMZlbsZ^>r@H|=tYs`MUma%;zV{x9PP;*M_i%_9K{ro ziIkDa+-d#!a)q;1^J0(qDHKq%p^{SLqpirs@fH|Hdc$g5=PP21cSivg(aH#kP;FjR zp8XchiU@|lMs%aBIesiFnJ3MPPS~?ZY0U~Yv7R5~ZH0@txLS@i;Xje}3y^ck85)~n z`&T1sn(ov79oG}?0P<8Oqx~&~PH|Te0ztNZpm`PV%>*W)f&vpynUza%Mc9!kLp+C> z{vw%LiigJsera)Wf+@qtZtWwP3#*+e=3m+Hl{Q~v$o@=bs!fZrW8+k)qIF>wkdp%P zTB>LA&~fmwmbUPXjhTRJRxc%;%5OrL6smcfzzy-Mqy5V2J#M5v?wq~QPPzUjgdB3O z|g-ROOunJ&C`S1Ga9rJ0KC7ihO0-o&NgrTo3%F?LX!m;hAobY_e z=hIx~y^$Y|&y74&ieV11W91Lnt}Ik2S4A2I!loh+_)c)+EPc2T?Tp;5!i@d6|3})I z!X^o1v7Y-gPp3~NQ_;?kG=rMUtM$Lt2Q1ot1L6MTA!4D_Ml{ z>RKzzMAPj0wdwksBU;uh$3)dz-xWq@Bgk42gi=R;mlIL)!-%3O8Npe1X=K(O2e)9@ z=oez+`;!1X&4qfH!R65PpfN0Qa&zR&Zc;2~LE+MER>O_7vGRVScKl*NU;~+r6vAvY zhG%85U|`pBX<04tdF{rOZNz5l&h@9fm(DQq_oykW`k`nopHHy(!U*yITg>a%ogyUx z=Kr-iG3WuKiLuoFL|;>10-5AMewoU)90gT7gk?e*9vWs00VNbW*;iMSSO_vZ>3pgR zMdigBs4J0L#FJweV@XdPNCh0Xq>x*uxZ3C6O>Q^5o;HsHyj{~)*p51m7`mT6I$^+! z41dBx`p+z8a7uX>Ispu3b`CBG_pb34c2!41PIfiop(2pOu-t6?w*CTKGe1o!dd4H~ zImDs)d20?ePV8uR@F7V<@khJQ7zjSfmw%IeE!~UekFMg^M-`z2dj$I8$VXBPq3wko zL1G;v1S3^6jES9|xAhJ#Xk3zhOEb4Msx^$7XA(W!Ib`I@Fb9lSfaFK-uoX)uHo9VO zePuDWH+Y))guzHvCfm?lU7!y;G~h^V7@y&Mn!tt%*gKVl6}8a{8VLIVz-k z1h={MiNy`_9$C^P_q3ZFRt-Ci;{Pwg+xYow*EZ!DZ|*yz~&r7!GqWV4F#uId7- zGOIVwNP}u=O9xuV4}4^fCgNb)(qv3+ogVK@zz^M?kl|DFy=|Kg%<$J%7V#G=>Q~w( zb&2S?)|isgT3g1l_&OjazVsSDmN=EuViLG|zot91sZh|vqy|)t@mR9l5>kaGD9ljn z;hc<-jf5sB4^i*J#0GQ*jE&)H6E(#vNH$5;(aJ*?1^_%`hT7;FibZtw0r9@{Wzl7n zE7U7=ozTiahT5oQ`Ev?aRM$ZM+7Nq+M>P3BwjJRXv^O|VU%)j*2P|=4N-UaBpdcyv zz9>pAiGLW%E{TKEPlPm`vEtK~z9NxpeZ6(?$H1^XzwyO6swOlgXVc+?8Zp?Ph7%jd)2>Kq&^!N<50 zog(5?0la1}-L7AC1%aGJN3$GzAyI;#LvMCo0f6c;Pkr1dOFiqH>~-q3z47h97PU7k zkLTDu4M)vbs@j*#UpYnCQ^Px_<%+36u5bi2M{+hrZ7-7Yf*UK{)@ys&ma&XSBojRo zoOf-7AZFc3s$n*zo0}O_v>fdw$W98G@|7VfsIwu}4;k2qkuoV^E~v8$mA}cXOr!DI zO+Z|)UB5gFC#7IuOyJOsr4GlsYDVVF&(vV}!|;rOC|30ojI21Uh#nnhr!{Q1+fABt z%bf6<)4bPAb<8pK(lM2|vKrsNxq>`Loyomt@z*1IY?P{r2WsUhm3mro#VC!l?YGWj zMr~d3HoF?{QuO8ly22=GD5r-#L$eu~-vFQKPc=GODRVc}$+Fxy0G;6Ky$yZQ<<#kR zYT!Yc^9OraRJ6GMWt9>UJC)ggVCXx4i48tg0kYMia4EU?WRKbL3M^w%A_tR`tj8k> zqXieNzH4nhqL@CD8;^HJoIMA_$Nh*1qzQFc3?`T5I#Bam(wjkMhyDG)%~J}QK5&In z01eYPx`d}_dCoBp#|WDo#__n6lALRmG(6=ZWxK{V@CpkPxAR#M147c7n12X-i!)-? zuWqy^g`lCJgxN{De4Ehyjn3<7lj=tm01-)5>S>^Ed;5#_8pfD66hg_52ag#5wPEJMZL@$=;ldMgT^s<rOnfD@xS))K<21=v$eqkj8(rPm~A!XKYtFBuKjh_ zQ2bwIIDx~(wIS&gHHxYU^JZ(I(Tf;_iVHaYr6s}q@ySuhDFX5~xoqQX^mKJ5x2$a1Vbz>)&39!;O{n4fw^uZ_T8I!9LVfm2om3U3yBZE zY9<6he%FBOaW#;*D)DAh@vkSu#H%-2HpjjPggXgcaT-gsveSws(2I(sdx(u3e6R}v zW~~~T`5-55H^hKsU&Mg*3C_0tSEAe5ptZ)_f)qVH8E;Xtxd!t9kvY$}X^5JF^ampt zC3W2>Dr>*T6#oIQ1^p1TrhnzN__pAV3-f!~Ti9gUWhqoM2g-Ei)CG)R%VtW{w+MOl zf!xsN?TzwdF)Ldyz`Kn|^rwbb&k*xvS>3f|TU%bi&LhPlSoM13@YJyQmMj>$A+nD_ zA5J|p9%s*Qu=C)VSNj|`l;+oYkJhn{&L^%{F5)T+OX26b-keK|oH+qDHDaF<)N(xm z`*rH48%LX1!jTE(LNn5Xq79?Cu;3XfQaJdqy6+7IFQzcZfCWSxf(8PS<)1_iby(+6 zqh8@uzhTnz^{X#2SyKhK?QKl%1m;JU)L!AukDHpO8%Y6qbH|-2DHPXThvnFl!RDAo zAv5qsL)+3?$UBxHRmhZnh%7<;Xo42mTLq=yqd27O$w5yG`cxhS6~v@q3I4PjnWLGu zU=Puimf9T&VA`gxMLfdh@H#owa^~uM@oEQXzXet4Pqm z#Vql4;txp1Jcuy!z6cPW_%M~Ixa2;ikPGI*OXZWb-Of&HiJG~SojO*qu9zm1@g8qE z1z1|D@4+T4ofvZ3WYSoDaN0@hidy`uFPd1S&TjS~kfQEugt5v5Z(=GJWi7|@gC2aZ zuHIlHb{p1Bp@S0imRlb`R~+MfK&Cmvrrt4U^fdGxvMcW!c{I;?;%`)DMWkp;bfTak zOZnffRwY|4iJT72C6Sf)_T~W?BWNiiB$1dr^+tU6s>!+L-djODMH&hGFDt;O(C7>pLd}Ck;39 z1>!mud7(xX-<=u`g!yPVYZK;3)Yjh8O=#NOwPdj6;ExgEBC zmwkZ15@kkae$-D%wSJ<;QHQ8X=(1-nODyUTU}3jiJw-$9&(x`WgFzynt}}5=kGLI! zLEFK8mBI(Ai<9Z}(385f8DGX!i0|m!@K)}iy=aGN!k(olp=Rfa=uzwBT+U|q@9qGa z{kRRs{>8!2)jBtkVsY=2(Mtnfz7Gn`U5k!#_h!lMMn|<3|0_IT4XW$#xi8)*c|JXob+@~C|`HN7SzWV zZGB|gSl;{-M@L2`X;auoA_5WxSQsO^HDREcUqh(>RIg#?9&ReaZp)iv8(ezUbkM|tuDY6+`t z(M)jRSlwvmZEd^oqRXK|I26b27?F1yU~@&?21pu+DQkraHZCvjXF<=FzwjnL&x_v} zG!9a~8wsnhkz0NFZV16C5lPPw~rm*+Lbai_4vS?32zO8OF|)#J0ZQ?n!D=a9#NwUgpzI~TV3 zj-)6Sq}+!RvhE+9KTVHQv@la-QdAGPn7wifnKpNiTTC+MO7BA3vK?-oZ=47vKz0&8 z4e4EVTS2Q0NyE`8hwNM_`Mc=^kDMDw!mgxjir#QU7Cl)S9?~Y&-ln>4e^E3DjQ#M= zeK&e{Vz!W%TZ^c5IR{Pwa%hRs=dp1@n9<;Z6I5^9?2B=fRo01QY_bq+;UR<_Sn1p0 ztl{Kp&^0WwxZz#6CH=aCBrbOj{rnKx*Y`cxvk`0%at^=2_l?M!zCy0g(}sMrGjWz7 zMQ@Rw)_zlm2wwcKYdO~0EEkZS(H(A!)M0ZCgRFt{z7>_XEdmpeFo_GtND$ilXD}oL zl5GY(I*fEF#APp4-@fIp50X#6Vo}j@vdgY6?7D{QX(vo18*P{IeHBIY#|AHgsUNjt z((Y@IbSXQtB5fsNMRj$>d@guO0oM9Cw2ZzyE~uNyk`qz>rDix&w}FC`dojE6LF@$g z1a~n0blWkFPw@mW{n)w0-uU*TOMKm5JdQCRZ_kjU+exr;pt!yFe((pf9BU7Q`W4BE)O7yDxb}Y%*QBMIW^WYc1{i%<*8x~cf%5ZW#HBm9Yj+~6ftgVNmn`+)sFv=Gy3R(8cd=x!wkHSWqY$OSD=$~ z(6&Vu)-)+E&*x3yY@;KY?pQk6uN-^7C-o)@UeuA(T|<$@tF7Q!^R}>Pq6hS` zcV3y~x&_C7lw~A4z4{;^a889x>im&%J3ZtKdWnqfQ$`p{rc8*Q(xY+${6J!=o}jhT zrZS*UkuI=btoK9F;ptnzr-VSFGAS(1g%eY*&X zT0|OzMmM6Ltb7?+ZyUALvA$xavJBT@F`-$@1l|lWN4|($HfJ{;CygANPQz8qg3Hp@ zAF73GpjS>nf$79weUl8Yq^tXp>VfSDY6%!biFx3tulbxGeCCi9$cFJanoMfQ`st>6 zzcyz+%VJx$OG3p@PF^pnOsIUxq!Re*mQ;1%lt)7>k>88l>8)VhZZp1HxF*h^VTMT{rjADQELPvm9Hk@%?L?Y;gNL+axAZMtj1tSq>8V$Ii zw{u$Jui_mLv&UpJm2;zyie{S<>%}_P5+7xWrXZx>63>EkjIAS5-#5;s@ui4C?InJA zHog|^|K1$t#lFHR>+TPC3&X(*p+ssUJMHo#u zaPCZ%!M{4>41BfiDGQnq;i6+AWr3en5w4<8)cC=Lkd!i%b+dtabxjlf!%9=i2s4IV zvc%3FRvZ*3tj4T@g_$}uK24`^Sfun{JUK8DiX&&*&=S%GC_KecyT zPHS}R!NQRJyRMr-A{-d#cB02ch+|fN$H0z9ubJyDAn$E2z#jc8Ml;Qb z5YXINa0V5&)7%zg?&=cW<4OGJTrf3CGmeYYP=i!g-;(O6rwmN%P0AF11$2<{O~t;x z^e?iyWbBuNh<0~itKX^@%CnzF>%`SpCltHYplki)(dZV7feD0{#Q6}yf@*cZEp?0O zoubLfZ40~-Y)Xe>;p6_<^D&?Yv7X~kwNZBgeG9W~U<=>v@opBrNQKRe5UNWxm(v*% z_!q=_qqC%uB6mT}^imTmHQ@BZ(-91=N*RvVR@c!|HPtISsn8AiFu-(nFz&yP)uRIrmz*bBUazZrevtC@8wRc#=4+X=o_e*qdC9Z z!La2w^h%e)qzyRsAAuo;z6Yu*dA}cpL&Xz%Zs{;K%2cm~WS*kM6eZ#%7ZfCV%&dMw z2FNvT#0-s1^c@oHJBbpyMnU)M#I(P)8#m7@mMtCu1V#Rp&R35b#eX4oO_)S5_1wTs04>AD=aMR z6-x0(RY^xhe|GtDkp)8Ld27i{8xsk-9QZj8prd$wLE+qxwAuG3bEq?3SVDzY$yYKa zI_vS=jRxGEX^@)OepSy66po>Z8D_GQWp9mMCHJ+|U~sCVDPw5sr>UvNhHc*&Fa&80 z(sJs|YUFqoxQ~5BYfVrhS_DlOm|Is+*K4y+PjG+R^XLO1!dlO7&{Vt1O??||l;1IIq*u@wiZyDEEOA2p21T^dBZ%W6Ix8s=pfkv09ME{~ zOq$m~LDo%g=%KVaWj`v=G_xiAI3uq&fn%NL%q9&4J-lLypjAZr2@2 z>0_%5d1rDxOggISM;g~2fnyQXwyTbgtv6kst7j?gvT|E>u4QD3MHma`2fi`E8!oj< zMxsAQHsoTCKZi?<%o%mI$}1gkiDd@WMNrHCoYm6F=PCJHiayLDt2c_R@UiJPPbSt% z$x~76e7zq$p{%ELU{&j&HH4nVP}AWxSBo;?o=K#Pf6I=g5XZR(Z2NsHg{`9j;y3(( z2@f=cYdw13_P$rri!h^r|F$IkVFl4W_EYLHowYDMNn%2{pT(D#H9&)aPwz{a+^wMy zBK>cFsChO<4Fs%J8wTQdc1ekMwFd`Xtyy`8?L^6BL zsoq{{@ox{hy=Ol_eU;RXZc8k6ub`DJ-=`d3o(T^r9L5ViOu2Ognu{#&-)QJLABq#hj1+42%s$u=RC!^A<{#l6(PjL2DyA#R81u&SrgVO+CcKG7~5a=U)r&2*j7+wtVaNcqli`HRv6&c+)+(iYU_T=qj-yr+nb>v{Mu!m5mC8-BIr?m zDvE-RZRIx4C)-sVg82IG&5}+(gN7OF%qYO3jg2iM#f@H}2vOe`vLekX@biOy<5kW4#H%$Q4m_++ z6oe+J_m#s9UqHX;!0OOiC+WAW$w>>gnk;X66SFct?&a(?_#I(~_Ov*5g zBpf?)y}+;4UPzn5l=H6od8fEDeT5YB5^CQ6f{qLoXRJfH`tr|HVM(Mb9k-{^24d?_uG*!=3cKh=hWl%q+Z+Mi#3xuQx~|J~bO1H326c zT|gcXGm}W9z&hxfPu<0!$Lg%RDXbi_JBgfKqbq$Y*B>1Omg!1g-}K>3!>Jtzzk2LN z)+LrAw>OT6LFC^N45FW5tWL?AGPsFEfEZr!35pqa0m+{v+49S?W|@LEMkfKr?x^r6?stn{<@|3PD|TUiUAA3&ha%~>1f}e3 zi(m7~ap~EGv?>R#1S1?CQRM`8#JgV*P zlz|&g9-dga42_pa=xElp_A;p}8P&?5N$S?y`aQ5Oi!qRa0u=NsNH`!dNIZZ&C>Ppb zd0LTMl~&K~UbSi)@fOcARYfC6U9ngzSBa^Gra|I_0Rux9PYp-U9*P0_Vl1OCPd|TV z%pX5$7GvE}(?2sPQ>4AV&A#O6c;A{dH6@68Di^X@7)Rx263Itqu27u%5Q0(5AW~kv zELOt%4i3}KpB{w7lBZCJ8MtrltN#)I*<+W6v9!xRe&#oF6e8S^y4KNsi9gy&1Ee53=UAou59q0we^~b1#)NYTk zkY+QEOKAIGy!UPJeYZjv3FazB0s81*X<_@`%uB5+daztGGg`mvowQklW~8x7uBx-t zTCg;&@v#!6drh`@NFDq0#LU%SJwsNXPmjGaI41~P0eisqf@bI+8f~7-II-m61Guvd z2(l}OBGj(7oz*t)-R;<)UA$Cm*-M!TRS7X{m<8DH13BXoN3^BNhA~G3*1>i*rRj82lSps?d|#M?g`+fg)7b^y7C7 zTCA#Z>a=~ee(Dvr3RmF=#H-mqKmzpK^dC?0MLgN55=JCW3wtD_CUaI2-Kk|pq%Kem zJ(K#}3%$9NB`ZsBX@B>0e_cl~?K85M<6kgi^jkUJaYfOd%HK*#Vd2^`;yrB(Wk?~v zrcMc0RV(G}tW@}|xEfBfZDhV~FUMEG@(zcb#An0>Q)<@EFP^=ze)aob0yQL_^0qpP z{KZXHE>kC-igxLUa1B&N^e6$Y@43uRL57_7rJ0sdK9d|-g`1OCO@Hu+%8}}GX!2@iqkSx1-`Fv= zI9t|a!^g4LSbDXX4cDyVQI2a@;(ge*yNa=CX=>kN-Q4t&WHfsUG%asb5aT)PI3-Uk znmtS(VsQQ*vCLliC}=d+s>57U&}Ll$RSmjYK6ZWcclM~#H3+vo=zDCmaH!0KKlE8x zi3IHlT$4Uym^{Y-TD_^g^@9Pu@1_`+!{0fo&{B%uQUb_Fa*%wobEaU1SExdo&i2H3 zbb{;%_h+h?YeHh^E6o;CeoyLBpx@IwMCH4Op%Jl&T%Ifs=WWF6)SV0+nvp*Z?sv5e zzbFe~RE>K3gklM9GL3cjAC*ned_l@n+6#x7TNx9B)9qgXtcUi^{dH?bDLlHJEj}P| z7vY$~F3}%3rw`upWwzAbmlOa+nH;gZ3KY=fd!PL_OzZ85L! zJnM>+i#Xj_5PifwU-U}h4;Cq#cH{GO<39TzX^hF`5C3`a>Q}`PbYyS!zKG0a2BYyf zM|Ylw(jZX+CYI}qb6cz382uE6ldaXoW3-dLZ>Evs>dO@TMv}MEUF7O3tXW0ew=Wg1 znyrJmzXboL^bRwxj;(%Od!-$a#az_Qm}efeAiC&k@W`-)nCAEG$<*nMs*wvalCSFz znA2E#`c0+8aV<96H@=X?kq&UhTY;#X9cdB6Ei0`63Q#9jG#kpVtbG*NZ>)yu{MU;R zY+y=YXvJ($y$yrK9CFFC-e?(Fo1o9PpxVcHwVh zYuwZvH7#B{IXl7xOMlgxu4I3=!m0i>?QI%*@ z*zPlpBX^M>G|S=My>SlwoqA&r4JbI(v$KYKwx)D74-KVt8{;X^`E&73#F9c)vvH?# zjr6ZgrOgLO0DdMr>-(O#`0^Z8NIAW0G;B7I*^EnfVP@YhA=PDHv^2{tZ5+)jAr;P% zqXYFd+2b-4eTcHd>tB6XZ+){)cs?}NiaP?`Ik*R|RUNBFC3?En#Cpi2Xi%4{!s#!U z@o>su&i`#J1hVP}#MfoPP4q_C7+j%~u+8~^>KihZZC4qe^S^5ov?}j_ugp@k6bQIX zy_HjL^j^2uHj_VFz7lE8++tvq?%*6w+J9fOfqT$6SQUR2z4H*z*>UIDe*tZ43;2Ki z=N<w*lZx=(v)jIDPPjNcPSyxUC|Ojp?H$6eju6ki@kC_PI$wlG_*|2fhsLrJju z8a+wc`D!wVBxe}yh-j<3$w4^U=S*L-mPeM0)AeQVU2174^zLt(7% zka&4dT&X3=H&RS-1XAGfoa zH6-gmG^a3$AyXi%W)3&AXeSC@cgd5-#2EgwNh;ZjWGOxa5 zN4|Y97&{aTXyJX)4TP442e?@&b6^6Z-w6%bM9@g@*@?9{3)pOfky~?Ug^DN;{XJZ~*2dfdn;d*w}i_0s?I^bI$pj@%BcBa2PVBs)e=1M9?c z{!cZgpu%=9f1LQK^*gnm+{ma1`|@;D{OscCG9x8<^TEqV$ntlgzsa$GqRba&he6PR zX}@sBZOYfh>(_x{fxf|iCVqPFXYu9rPk+YkT=I#W{e-+hzZ|8QyORMO0W7ijiBn{_Fy71$Wn$aqanYS2CL^} zaOV89jUHIu-uLhd>MTRmW&8aV%oU2Q$z^_L`r@zlMX>h##409PZU+-M@5S25c!FWM zS_M9j_J(?*O=eJhLi)l}VJP@+dTr*)l0$+SP{9b!iQ6B*V^h0(=x8tS<;^K}6^~qY zb(@<-OAG){JAW+>;WZsV{Q7(_I$i+`;ex>o;s7X4OeP}%iU}%YXQCM~17=1DYi<<1 zGk`kl*;G}k8&yM9$@p8D^T}2UgKGps{KZuA99Okqm*>CzLjI+Jc%P2Rl00ILTKff_ zTFE%4!I^}oH-R9E1r{b~EwI}N8P4g%kq~E9fQ5bcy{JUdW3sTwdCK$E0`>XNfXOU|vy@5|> zp114amtwY-J6nMaLArnN_Art`TOgESxnao~Rk)!x=yl%Oh~6CGoM@K#aQPY}x!#a4 zcu5j*MInRjfveH5ydSaa=VWAoR_=GItv{TGa9sU*h#^kElQ z_(I&AtY*xdtjs*@Ml3wWESy|yW?U?0?96OzCaf$xTmpPX|DP8LQrGIhsCy~G=C$DacWJVTd{J*OyB$%)DNz=+p!a4EX0?#*DB>5j!0b%j zG>VbZcPLc*Xte`eAY+doEy4@=2h86dNxsLW1+MuIs_u3$@OBMO)PwE@8}kRD zEf2DC%1e^UR9lB;J(*r;x8g9DK4S-|_sqV%}B=vn^0M#cEo g6>j}Eh(pOxcvIV72?V!z@GP8c@RXEd3gYnp2Ve{W2><{9 diff --git a/mongo.tex b/mongo.tex index c4c5c01..5029b9f 100644 --- a/mongo.tex +++ b/mongo.tex @@ -68,16 +68,14 @@ \section{Schemat bazy - kolekcje} - Opracowana baza danych składa się z 6 kolekcji, łącznie zawierających 30 dokumentów. + Opracowana baza danych składa się z 6 kolekcji, łącznie zawierających 70 dokumentów. Poniżej przedstawiono szczegółowy opis każdej kolekcji wraz z przykładowymi dokumentami. - \caption{Struktura bazy danych systemu hotelowego w MongoDB} - \subsection{Kolekcja: guests} \textbf{Opis:} Przechowuje dane gości hotelowych wraz z informacjami kontaktowymi i dodatkowymi atrybutami. - \textbf{Liczba dokumentów:} 5 + \textbf{Liczba dokumentów:} 15 \textbf{Struktura dokumentu:} @@ -125,7 +123,7 @@ \textbf{Opis:} Zawiera informacje o pokojach hotelowych, ich typach, wyposażeniu i statusie dostępności. - \textbf{Liczba dokumentów:} 5 + \textbf{Liczba dokumentów:} 12 \textbf{Struktura dokumentu:} @@ -164,7 +162,7 @@ \textbf{Opis:} Przechowuje informacje o rezerwacjach gości, zawiera referencje do kolekcji guests i rooms. - \textbf{Liczba dokumentów:} 5 + \textbf{Liczba dokumentów:} 10 \textbf{Struktura dokumentu:} @@ -206,7 +204,7 @@ \textbf{Opis:} Zawiera dane pracowników hotelu wraz z informacjami o stanowisku, wynagrodzeniu i harmonogramie pracy. - \textbf{Liczba dokumentów:} 5 + \textbf{Liczba dokumentów:} 8 \textbf{Struktura dokumentu:} @@ -260,7 +258,7 @@ \textbf{Opis:} Zawiera katalog usług dodatkowych oferowanych przez hotel. - \textbf{Liczba dokumentów:} 5 + \textbf{Liczba dokumentów:} 10 \textbf{Struktura dokumentu:} @@ -296,7 +294,7 @@ \textbf{Opis:} Przechowuje zamówienia na usługi dodatkowe składane przez gości hotelowych. - \textbf{Liczba dokumentów:} 5 + \textbf{Liczba dokumentów:} 15 \textbf{Struktura dokumentu:} @@ -562,6 +560,9 @@ db.services.createIndex({ category: 1, price: 1 }) // Indeks dla szybszego łączenia zamówień usług z usługami db.serviceOrders.createIndex({ serviceId: 1 }) + +// Indeks dla szybszego łączenia pracowników z działami i stanowiskami +db.employees.createIndex({ department: 1, position: 1 }); \end{minted} Indeksy przyspieszają operacje wyszukiwania i łączenia danych, szczególnie w przypadku złożonych zapytań agregujących. diff --git a/skrypt.js b/skrypt.js index 6faef14..0669dbf 100644 --- a/skrypt.js +++ b/skrypt.js @@ -12,11 +12,11 @@ db.guests.insertMany([ city: "Warszawa", postalCode: "01-234", country: "Polska" - }, + }, dateOfBirth: new Date("1985-05-15"), loyaltyPoints: 120, registrationDate: new Date("2020-03-10") - }, + }, { firstName: "Anna", lastName: "Nowak", @@ -27,11 +27,11 @@ db.guests.insertMany([ city: "Kraków", postalCode: "30-001", country: "Polska" - }, + }, dateOfBirth: new Date("1990-11-22"), loyaltyPoints: 45, registrationDate: new Date("2021-01-15") - }, + }, { firstName: "Thomas", lastName: "Schmidt", @@ -42,11 +42,11 @@ db.guests.insertMany([ city: "Berlin", postalCode: "10115", country: "Niemcy" - }, + }, dateOfBirth: new Date("1978-07-30"), loyaltyPoints: 230, registrationDate: new Date("2019-06-20") - }, + }, { firstName: "Maria", lastName: "Garcia", @@ -57,11 +57,11 @@ db.guests.insertMany([ city: "Barcelona", postalCode: "08001", country: "Hiszpania" - }, + }, dateOfBirth: new Date("1992-03-12"), loyaltyPoints: 85, registrationDate: new Date("2021-09-05") - }, + }, { firstName: "John", lastName: "Smith", @@ -72,12 +72,162 @@ db.guests.insertMany([ city: "London", postalCode: "SW1A 1AA", country: "Wielka Brytania" - }, + }, dateOfBirth: new Date("1980-12-05"), loyaltyPoints: 175, registrationDate: new Date("2020-07-18") - } - ]); + }, + { + firstName: "Sophie", + lastName: "Dubois", + email: "sophie.dubois@email.com", + phoneNumber: "+33123456789", + address: { + street: "Rue de la Paix 10", + city: "Paris", + postalCode: "75001", + country: "Francja" + }, + dateOfBirth: new Date("1987-09-14"), + loyaltyPoints: 310, + registrationDate: new Date("2019-11-12") + }, + { + firstName: "Marco", + lastName: "Rossi", + email: "marco.rossi@email.com", + phoneNumber: "+39123456789", + address: { + street: "Via Roma 25", + city: "Milano", + postalCode: "20121", + country: "Włochy" + }, + dateOfBirth: new Date("1983-02-28"), + loyaltyPoints: 95, + registrationDate: new Date("2021-05-20") + }, + { + firstName: "Katarzyna", + lastName: "Lewandowska", + email: "katarzyna.lewandowska@email.com", + phoneNumber: "+48345678912", + address: { + street: "Spacerowa 18", + city: "Gdańsk", + postalCode: "80-001", + country: "Polska" + }, + dateOfBirth: new Date("1995-06-11"), + loyaltyPoints: 60, + registrationDate: new Date("2022-02-10") + }, + { + firstName: "Erik", + lastName: "Andersson", + email: "erik.andersson@email.com", + phoneNumber: "+46123456789", + address: { + street: "Storgatan 14", + city: "Stockholm", + postalCode: "11122", + country: "Szwecja" + }, + dateOfBirth: new Date("1989-04-18"), + loyaltyPoints: 155, + registrationDate: new Date("2020-08-30") + }, + { + firstName: "Isabella", + lastName: "Rodriguez", + email: "isabella.rodriguez@email.com", + phoneNumber: "+52123456789", + address: { + street: "Avenida Reforma 100", + city: "Mexico City", + postalCode: "06600", + country: "Meksyk" + }, + dateOfBirth: new Date("1991-12-03"), + loyaltyPoints: 205, + registrationDate: new Date("2020-12-15") + }, + { + firstName: "Michał", + lastName: "Wójcik", + email: "michal.wojcik@email.com", + phoneNumber: "+48456789123", + address: { + street: "Nadwiślańska 22", + city: "Wrocław", + postalCode: "50-266", + country: "Polska" + }, + dateOfBirth: new Date("1976-08-25"), + loyaltyPoints: 340, + registrationDate: new Date("2018-03-05") + }, + { + firstName: "Emma", + lastName: "Johnson", + email: "emma.johnson@email.com", + phoneNumber: "+1234567890", + address: { + street: "Fifth Avenue 123", + city: "New York", + postalCode: "10001", + country: "USA" + }, + dateOfBirth: new Date("1988-01-17"), + loyaltyPoints: 280, + registrationDate: new Date("2019-07-22") + }, + { + firstName: "Aleksandr", + lastName: "Petrov", + email: "aleksandr.petrov@email.com", + phoneNumber: "+7123456789", + address: { + street: "Nevsky Prospekt 50", + city: "Sankt Petersburg", + postalCode: "190000", + country: "Rosja" + }, + dateOfBirth: new Date("1982-10-08"), + loyaltyPoints: 190, + registrationDate: new Date("2020-04-18") + }, + { + firstName: "Yuki", + lastName: "Tanaka", + email: "yuki.tanaka@email.com", + phoneNumber: "+81123456789", + address: { + street: "Shibuya 1-1-1", + city: "Tokyo", + postalCode: "150-0002", + country: "Japonia" + }, + dateOfBirth: new Date("1993-07-20"), + loyaltyPoints: 75, + registrationDate: new Date("2021-11-08") + }, + { + firstName: "Agnieszka", + lastName: "Mazur", + email: "agnieszka.mazur@email.com", + phoneNumber: "+48567891234", + address: { + street: "Parkowa 5", + city: "Poznań", + postalCode: "61-001", + country: "Polska" + }, + dateOfBirth: new Date("1994-03-22"), + loyaltyPoints: 110, + registrationDate: new Date("2021-08-14") + } +]); // 2. Kolekcja: Pokoje hotelowe db.rooms.insertMany([ @@ -90,7 +240,7 @@ db.rooms.insertMany([ amenities: ["TV", "WiFi", "Minibar", "Klimatyzacja"], status: "Dostępny", lastRenovation: new Date("2021-03-15") - }, + }, { roomNumber: "102", floor: 1, @@ -100,7 +250,27 @@ db.rooms.insertMany([ amenities: ["TV", "WiFi", "Minibar", "Klimatyzacja"], status: "Dostępny", lastRenovation: new Date("2021-03-20") - }, + }, + { + roomNumber: "103", + floor: 1, + type: "Standard", + capacity: 2, + pricePerNight: 250.00, + amenities: ["TV", "WiFi", "Minibar", "Klimatyzacja"], + status: "Zajęty", + lastRenovation: new Date("2021-04-01") + }, + { + roomNumber: "104", + floor: 1, + type: "Standard Plus", + capacity: 3, + pricePerNight: 320.00, + amenities: ["TV", "WiFi", "Minibar", "Klimatyzacja", "Sejf"], + status: "Dostępny", + lastRenovation: new Date("2021-04-15") + }, { roomNumber: "201", floor: 2, @@ -110,7 +280,27 @@ db.rooms.insertMany([ amenities: ["TV", "WiFi", "Minibar", "Klimatyzacja", "Sejf", "Ekspres do kawy"], status: "Zajęty", lastRenovation: new Date("2022-01-10") - }, + }, + { + roomNumber: "202", + floor: 2, + type: "Deluxe", + capacity: 3, + pricePerNight: 400.00, + amenities: ["TV", "WiFi", "Minibar", "Klimatyzacja", "Sejf", "Ekspres do kawy"], + status: "Dostępny", + lastRenovation: new Date("2022-01-15") + }, + { + roomNumber: "203", + floor: 2, + type: "Deluxe", + capacity: 3, + pricePerNight: 400.00, + amenities: ["TV", "WiFi", "Minibar", "Klimatyzacja", "Sejf", "Ekspres do kawy"], + status: "Serwis", + lastRenovation: new Date("2022-01-20") + }, { roomNumber: "301", floor: 3, @@ -120,7 +310,7 @@ db.rooms.insertMany([ amenities: ["TV", "WiFi", "Minibar", "Klimatyzacja", "Sejf", "Ekspres do kawy", "Jacuzzi"], status: "Dostępny", lastRenovation: new Date("2022-02-15") - }, + }, { roomNumber: "302", floor: 3, @@ -130,8 +320,38 @@ db.rooms.insertMany([ amenities: ["TV", "WiFi", "Minibar", "Klimatyzacja", "Sejf", "Ekspres do kawy", "Jacuzzi", "Sauna"], status: "Dostępny", lastRenovation: new Date("2022-02-20") - } - ]); + }, + { + roomNumber: "303", + floor: 3, + type: "Suite", + capacity: 4, + pricePerNight: 600.00, + amenities: ["TV", "WiFi", "Minibar", "Klimatyzacja", "Sejf", "Ekspres do kawy", "Jacuzzi"], + status: "Zajęty", + lastRenovation: new Date("2022-03-01") + }, + { + roomNumber: "401", + floor: 4, + type: "Penthouse", + capacity: 6, + pricePerNight: 1200.00, + amenities: ["TV", "WiFi", "Minibar", "Klimatyzacja", "Sejf", "Ekspres do kawy", "Jacuzzi", "Sauna", "Taras"], + status: "Dostępny", + lastRenovation: new Date("2022-05-10") + }, + { + roomNumber: "402", + floor: 4, + type: "Penthouse", + capacity: 6, + pricePerNight: 1200.00, + amenities: ["TV", "WiFi", "Minibar", "Klimatyzacja", "Sejf", "Ekspres do kawy", "Jacuzzi", "Sauna", "Taras"], + status: "Dostępny", + lastRenovation: new Date("2022-05-15") + } +]); // 3. Kolekcja: Usługi dodatkowe db.services.insertMany([ @@ -143,7 +363,7 @@ db.services.insertMany([ availability: ["Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela"], location: "Restauracja hotelowa", requiresReservation: false - }, + }, { name: "Masaż relaksacyjny", description: "60-minutowy masaż relaksacyjny", @@ -152,7 +372,7 @@ db.services.insertMany([ availability: ["Poniedziałek", "Środa", "Piątek", "Sobota"], location: "Hotelowe SPA", requiresReservation: true - }, + }, { name: "Transfer z lotniska", description: "Transport z lotniska do hotelu", @@ -161,7 +381,7 @@ db.services.insertMany([ availability: ["Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela"], location: "Lotnisko", requiresReservation: true - }, + }, { name: "Wynajem roweru", description: "Wypożyczenie roweru na cały dzień", @@ -170,7 +390,7 @@ db.services.insertMany([ availability: ["Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela"], location: "Recepcja", requiresReservation: false - }, + }, { name: "Kolacja przy świecach", description: "Romantyczna kolacja dla dwojga", @@ -179,8 +399,53 @@ db.services.insertMany([ availability: ["Piątek", "Sobota"], location: "Taras widokowy", requiresReservation: true - } - ]); + }, + { + name: "Sesja w saunie", + description: "90-minutowa sesja w saunie z aromaterapią", + price: 150.00, + category: "SPA", + availability: ["Wtorek", "Czwartek", "Sobota", "Niedziela"], + location: "Hotelowe SPA", + requiresReservation: true + }, + { + name: "Parking", + description: "Miejsce parkingowe na dobę", + price: 40.00, + category: "Transport", + availability: ["Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela"], + location: "Parking hotelowy", + requiresReservation: false + }, + { + name: "Kurs gotowania", + description: "2-godzinny kurs gotowania regionalnych potraw", + price: 250.00, + category: "Rekreacja", + availability: ["Środa", "Sobota"], + location: "Kuchnia hotelowa", + requiresReservation: true + }, + { + name: "Wycieczka po mieście", + description: "4-godzinna zwiedzanie miasta z przewodnikiem", + price: 180.00, + category: "Rekreacja", + availability: ["Wtorek", "Czwartek", "Sobota"], + location: "Start z recepcji", + requiresReservation: true + }, + { + name: "Pranie i prasowanie", + description: "Usługa prania i prasowania odzieży", + price: 30.00, + category: "Dodatkowe", + availability: ["Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek"], + location: "Pralnia hotelowa", + requiresReservation: false + } +]); // 4. Kolekcja: Pracownicy db.employees.insertMany([ @@ -200,8 +465,8 @@ db.employees.insertMany([ city: "Warszawa", postalCode: "02-123", country: "Polska" - } - }, + } + }, { firstName: "Marta", lastName: "Kowalczyk", @@ -218,8 +483,8 @@ db.employees.insertMany([ city: "Warszawa", postalCode: "03-456", country: "Polska" - } - }, + } + }, { firstName: "Tomasz", lastName: "Nowicki", @@ -236,8 +501,8 @@ db.employees.insertMany([ city: "Pruszków", postalCode: "05-800", country: "Polska" - } - }, + } + }, { firstName: "Katarzyna", lastName: "Zielińska", @@ -254,8 +519,8 @@ db.employees.insertMany([ city: "Warszawa", postalCode: "00-120", country: "Polska" - } - }, + } + }, { firstName: "Marek", lastName: "Jankowski", @@ -272,9 +537,63 @@ db.employees.insertMany([ city: "Piaseczno", postalCode: "05-500", country: "Polska" - } } - ]); + }, + { + firstName: "Joanna", + lastName: "Kamińska", + position: "Recepcjonista", + email: "joanna.kaminska@hotel.com", + phoneNumber: "+48890123456", + dateOfBirth: new Date("1990-02-08"), + hireDate: new Date("2020-11-15"), + salary: 4300.00, + department: "Recepcja", + workSchedule: ["Sobota", "Niedziela", "Poniedziałek", "Wtorek", "Środa"], + address: { + street: "Wiśniowa 15", + city: "Warszawa", + postalCode: "04-567", + country: "Polska" + } + }, + { + firstName: "Robert", + lastName: "Kowalski", + position: "Kucharz", + email: "robert.kowalski@hotel.com", + phoneNumber: "+48901234567", + dateOfBirth: new Date("1985-12-20"), + hireDate: new Date("2019-08-01"), + salary: 5200.00, + department: "Restauracja", + workSchedule: ["Czwartek", "Piątek", "Sobota", "Niedziela"], + address: { + street: "Klonowa 3", + city: "Warszawa", + postalCode: "05-234", + country: "Polska" + } + }, + { + firstName: "Magdalena", + lastName: "Wójcik", + position: "Masażystka", + email: "magdalena.wojcik@hotel.com", + phoneNumber: "+48012345678", + dateOfBirth: new Date("1987-06-18"), + hireDate: new Date("2021-03-01"), + salary: 5800.00, + department: "SPA", + workSchedule: ["Poniedziałek", "Środa", "Piątek", "Sobota"], + address: { + street: "Lipowa 9", + city: "Otwock", + postalCode: "05-400", + country: "Polska" + } + } +]); // 5. Kolekcja: Rezerwacje const jan_id = db.guests.findOne({firstName: "Jan", lastName: "Kowalski"})._id; @@ -282,13 +601,22 @@ const anna_id = db.guests.findOne({firstName: "Anna", lastName: "Nowak"})._id; const thomas_id = db.guests.findOne({firstName: "Thomas", lastName: "Schmidt"})._id; const maria_id = db.guests.findOne({firstName: "Maria", lastName: "Garcia"})._id; const john_id = db.guests.findOne({firstName: "John", lastName: "Smith"})._id; +const sophie_id = db.guests.findOne({firstName: "Sophie", lastName: "Dubois"})._id; +const marco_id = db.guests.findOne({firstName: "Marco", lastName: "Rossi"})._id; +const katarzyna_id = db.guests.findOne({firstName: "Katarzyna", lastName: "Lewandowska"})._id; +const erik_id = db.guests.findOne({firstName: "Erik", lastName: "Andersson"})._id; +const isabella_id = db.guests.findOne({firstName: "Isabella", lastName: "Rodriguez"})._id; const room101_id = db.rooms.findOne({roomNumber: "101"})._id; const room102_id = db.rooms.findOne({roomNumber: "102"})._id; +const room103_id = db.rooms.findOne({roomNumber: "103"})._id; +const room104_id = db.rooms.findOne({roomNumber: "104"})._id; const room201_id = db.rooms.findOne({roomNumber: "201"})._id; +const room202_id = db.rooms.findOne({roomNumber: "202"})._id; const room301_id = db.rooms.findOne({roomNumber: "301"})._id; const room302_id = db.rooms.findOne({roomNumber: "302"})._id; - +const room303_id = db.rooms.findOne({roomNumber: "303"})._id; +const room401_id = db.rooms.findOne({roomNumber: "401"})._id; db.reservations.insertMany([ { @@ -302,7 +630,7 @@ db.reservations.insertMany([ specialRequests: ["Późne zameldowanie", "Dodatkowa poduszka"], bookingDate: new Date("2023-04-15"), status: "Potwierdzona" - }, + }, { guestId: anna_id, roomId: room201_id, @@ -314,7 +642,7 @@ db.reservations.insertMany([ specialRequests: [], bookingDate: new Date("2023-05-01"), status: "Potwierdzona" - }, + }, { guestId: thomas_id, roomId: room301_id, @@ -326,7 +654,7 @@ db.reservations.insertMany([ specialRequests: ["Widok na miasto"], bookingDate: new Date("2023-05-05"), status: "Oczekująca" - }, + }, { guestId: maria_id, roomId: room102_id, @@ -338,7 +666,7 @@ db.reservations.insertMany([ specialRequests: [], bookingDate: new Date("2023-05-20"), status: "Potwierdzona" - }, + }, { guestId: john_id, roomId: room302_id, @@ -350,9 +678,68 @@ db.reservations.insertMany([ specialRequests: ["Łóżeczko dla dziecka", "Późne wymeldowanie"], bookingDate: new Date("2023-05-10"), status: "Potwierdzona" - } - ]); - + }, + { + guestId: sophie_id, + roomId: room303_id, + checkInDate: new Date("2023-08-01"), + checkOutDate: new Date("2023-08-07"), + numberOfGuests: 2, + totalPrice: 3600.00, + paymentStatus: "Opłacone", + specialRequests: ["Champagne powitalny", "Kwiaty w pokoju"], + bookingDate: new Date("2023-07-01"), + status: "Potwierdzona" + }, + { + guestId: marco_id, + roomId: room104_id, + checkInDate: new Date("2023-09-10"), + checkOutDate: new Date("2023-09-15"), + numberOfGuests: 2, + totalPrice: 1600.00, + paymentStatus: "Zaliczka", + specialRequests: ["Pokój dla niepalących"], + bookingDate: new Date("2023-08-15"), + status: "Potwierdzona" + }, + { + guestId: katarzyna_id, + roomId: room202_id, + checkInDate: new Date("2023-10-01"), + checkOutDate: new Date("2023-10-05"), + numberOfGuests: 1, + totalPrice: 1600.00, + paymentStatus: "Oczekuje na płatność", + specialRequests: ["Cichy pokój"], + bookingDate: new Date("2023-09-10"), + status: "Oczekująca" + }, + { + guestId: erik_id, + roomId: room401_id, + checkInDate: new Date("2023-11-15"), + checkOutDate: new Date("2023-11-20"), + numberOfGuests: 4, + totalPrice: 6000.00, + paymentStatus: "Opłacone", + specialRequests: ["Transfer z lotniska", "Kolacja welcome"], + bookingDate: new Date("2023-10-01"), + status: "Potwierdzona" + }, + { + guestId: isabella_id, + roomId: room103_id, + checkInDate: new Date("2023-12-20"), + checkOutDate: new Date("2023-12-27"), + numberOfGuests: 2, + totalPrice: 1750.00, + paymentStatus: "Zaliczka", + specialRequests: ["Dekoracje świąteczne"], + bookingDate: new Date("2023-11-15"), + status: "Potwierdzona" + } +]); // 6. Kolekcja: Zamówienia usług const breakfast_id = db.services.findOne({name: "Śniadanie"})._id; @@ -360,13 +747,22 @@ const massage_id = db.services.findOne({name: "Masaż relaksacyjny"})._id; const transfer_id = db.services.findOne({name: "Transfer z lotniska"})._id; const bike_id = db.services.findOne({name: "Wynajem roweru"})._id; const dinner_id = db.services.findOne({name: "Kolacja przy świecach"})._id; +const sauna_id = db.services.findOne({name: "Sesja w saunie"})._id; +const parking_id = db.services.findOne({name: "Parking"})._id; +const cooking_id = db.services.findOne({name: "Kurs gotowania"})._id; +const tour_id = db.services.findOne({name: "Wycieczka po mieście"})._id; +const laundry_id = db.services.findOne({name: "Pranie i prasowanie"})._id; const jan_res_id = db.reservations.findOne({guestId: jan_id})._id; const anna_res_id = db.reservations.findOne({guestId: anna_id})._id; const thomas_res_id = db.reservations.findOne({guestId: thomas_id})._id; const maria_res_id = db.reservations.findOne({guestId: maria_id})._id; const john_res_id = db.reservations.findOne({guestId: john_id})._id; - +const sophie_res_id = db.reservations.findOne({guestId: sophie_id})._id; +const marco_res_id = db.reservations.findOne({guestId: marco_id})._id; +const katarzyna_res_id = db.reservations.findOne({guestId: katarzyna_id})._id; +const erik_res_id = db.reservations.findOne({guestId: erik_id})._id; +const isabella_res_id = db.reservations.findOne({guestId: isabella_id})._id; db.serviceOrders.insertMany([ { @@ -378,7 +774,7 @@ db.serviceOrders.insertMany([ totalPrice: 100.00, status: "Zrealizowane", comments: "Śniadanie do pokoju" - }, + }, { guestId: thomas_id, reservationId: thomas_res_id, @@ -388,7 +784,7 @@ db.serviceOrders.insertMany([ totalPrice: 200.00, status: "Potwierdzone", comments: "Masaż na godzinę 15:00" - }, + }, { guestId: anna_id, reservationId: anna_res_id, @@ -398,7 +794,7 @@ db.serviceOrders.insertMany([ totalPrice: 120.00, status: "Potwierdzone", comments: "Odbiór z lotniska o 14:30" - }, + }, { guestId: maria_id, reservationId: maria_res_id, @@ -408,7 +804,7 @@ db.serviceOrders.insertMany([ totalPrice: 100.00, status: "Oczekujące", comments: "Dwa rowery na cały dzień" - }, + }, { guestId: john_id, reservationId: john_res_id, @@ -418,24 +814,115 @@ db.serviceOrders.insertMany([ totalPrice: 300.00, status: "Potwierdzone", comments: "Kolacja na 20:00, rocznica ślubu" - } - ]); - - - - - -db.rooms.createIndex({ roomNumber: 1 }, { unique: true }) - -db.guests.createIndex({ lastName: 1, firstName: 1 }) - -db.reservations.createIndex({ checkInDate: 1, checkOutDate: 1 }) - -db.reservations.createIndex({ roomId: 1 }) - -db.reservations.createIndex({ guestId: 1 }) - -db.services.createIndex({ category: 1, price: 1 }) - -db.serviceOrders.createIndex({ serviceId: 1 }) + }, + { + guestId: sophie_id, + reservationId: sophie_res_id, + serviceId: sauna_id, + orderDate: new Date("2023-08-03"), + quantity: 1, + totalPrice: 150.00, + status: "Zrealizowane", + comments: "Aromaterapia lawendowa" + }, + { + guestId: marco_id, + reservationId: marco_res_id, + serviceId: parking_id, + orderDate: new Date("2023-09-10"), + quantity: 5, + totalPrice: 200.00, + status: "Potwierdzone", + comments: "Parking na cały pobyt" + }, + { + guestId: erik_id, + reservationId: erik_res_id, + serviceId: cooking_id, + orderDate: new Date("2023-11-17"), + quantity: 1, + totalPrice: 250.00, + status: "Potwierdzone", + comments: "Kurs regionalnej kuchni polskiej" + }, + { + guestId: isabella_id, + reservationId: isabella_res_id, + serviceId: tour_id, + orderDate: new Date("2023-12-22"), + quantity: 1, + totalPrice: 180.00, + status: "Oczekujące", + comments: "Wycieczka świąteczna po Starówce" + }, + { + guestId: jan_id, + reservationId: jan_res_id, + serviceId: laundry_id, + orderDate: new Date("2023-05-12"), + quantity: 3, + totalPrice: 90.00, + status: "Zrealizowane", + comments: "Ekspresowe pranie" + }, + { + guestId: anna_id, + reservationId: anna_res_id, + serviceId: breakfast_id, + orderDate: new Date("2023-06-02"), + quantity: 9, + totalPrice: 450.00, + status: "Zrealizowane", + comments: "Śniadania na cały pobyt" + }, + { + guestId: thomas_id, + reservationId: thomas_res_id, + serviceId: parking_id, + orderDate: new Date("2023-05-20"), + quantity: 3, + totalPrice: 120.00, + status: "Zrealizowane", + comments: "Miejsce blisko wejścia" + }, + { + guestId: sophie_id, + reservationId: sophie_res_id, + serviceId: massage_id, + orderDate: new Date("2023-08-04"), + quantity: 2, + totalPrice: 400.00, + status: "Potwierdzone", + comments: "Masaż dla pary" + }, + { + guestId: katarzyna_id, + reservationId: katarzyna_res_id, + serviceId: bike_id, + orderDate: new Date("2023-10-02"), + quantity: 1, + totalPrice: 50.00, + status: "Oczekujące", + comments: "Rower damski" + }, + { + guestId: erik_id, + reservationId: erik_res_id, + serviceId: transfer_id, + orderDate: new Date("2023-11-15"), + quantity: 1, + totalPrice: 120.00, + status: "Potwierdzone", + comments: "Transfer na lotnisko po pobycie" + } +]); +// Indeksy +db.rooms.createIndex({ roomNumber: 1 }, { unique: true }); +db.guests.createIndex({ lastName: 1, firstName: 1 }); +db.reservations.createIndex({ checkInDate: 1, checkOutDate: 1 }); +db.reservations.createIndex({ roomId: 1 }); +db.reservations.createIndex({ guestId: 1 }); +db.services.createIndex({ category: 1, price: 1 }); +db.serviceOrders.createIndex({ serviceId: 1 }); +db.employees.createIndex({ department: 1, position: 1 });