BE - MongoDB + express.js

Programovacie jazyky, rady, poradňa...
Laster
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 860
Registrovaný: 01 jan 2007, 0:20
Bydlisko: Bratislava

BE - MongoDB + express.js

Príspevok od používateľa Laster »

Ahojte,

robím si momentálne projekt BugTracker. Zatiaľ BE, keď to bude, tak na FE bude použitý React.
Mám vytvorenú jednu schému pre user a potom druhú pre projekt.

A keď vytváram projekt alebo ho updatujem, tak by som tam chcel pridať existujúceho užívateľa, ktorý je uložený v databázy.
Ale keď ich tam mám napríklad 10, tak na projekt by som chcel vybrať iba napríklad 3, nie všetkých.
Ako by ste ku tomu pristupovali?

Napáda, že v schéme ProjectSchema pridám users: type bude array.
Cez req.params.id vytiahnem jedného užívateľa, uložím do premennej a pridám ho do tej array, ale to mi na jeden request pridá iba jedného používateľa.

alebo
cez req.body pridám users [id1,id2] a validujem či existujú ak áno tam ich tam pridá.

vďaka
aacid
Hardcore addict
Hardcore addict
Príspevky: 5439
Registrovaný: 22 nov 2006, 21:55
Bydlisko: BA

Re: BE - MongoDB + express.js

Príspevok od používateľa aacid »

neviem co je presne tvojim cielom, pokial je to naucit sa technologie, tak ok, ale aj tak v dnesnej dobe neodporucam cokolvek vytvarat uplne od zakladu. bug trackerov najdes na internete hromadu, aj open source. nech sa budes snazit ako chces, velmi mala sanca ze dosiahnes (a budes vediet udrzat) taku robustnost a bezpecnost ako uz existujuci open source projekt.
ked uz tak by som si radsej nasiel nejake existujuce riesenie na githube a cokolvek co ti tam chyba dokodil priamo do toho.

a pokial to mas ako projekt s ktorym sa chces naucit technologie tak ani v tom pripade nemusis robit vsetko rucne. na komunikaciu s mongodb pouzi mongoose, 100x jednoduchsie ako vsetko pisat rucne, tak to nerobi nikde.
Laster
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 860
Registrovaný: 01 jan 2007, 0:20
Bydlisko: Bratislava

Re: BE - MongoDB + express.js

Príspevok od používateľa Laster »

Cieľ mám použiť mernstack, urobiť projekt a potom ísť s ním na pohovor. Lebo už myslím dosť bolo kurzov a podobne... A toto mi príde ako taký komplexný projekt, kde dám všetko dokopy to čo viem a fajn sa to bude prezentovať.

Mongoose používam, toto je také odrazové video ako by to malo plus mínus vyzerať... okolo 50 sekundy vyberá užívateľov do projektu.

Login a register aj zobrazenie userov a zmena údajov už mám hotovú, teraz riešim vytváranie projektu a tam by som chcel pripojiť existujúcich userov, ale iba tých čo vyberiem, nie všetkých.


a vďaka skúsim pohľadať na githube.

Autoeditácia príspevku po 22 min 31 sek:
Akurát som to takto urobil, ale príde mi to ako mess.

Kód: Vybrať všetko

const createProject = async (req, res) => {
  const { users: usersId } = req.body

  for (let i = 0; i < usersId.length; i++) {
    const userIdExist = await User.findOne({ _id: usersId[i] })
    if (!userIdExist) {
      throw new CustomError.NotFoundError(
        `User with id ${usersId[i]} does not exist`
      )
    }
  }
  req.body.user = req.user.userId

  const project = await Project.create(req.body)

  res.status(StatusCodes.CREATED).json({ project })
}
aacid
Hardcore addict
Hardcore addict
Príspevky: 5439
Registrovaný: 22 nov 2006, 21:55
Bydlisko: BA

Re: BE - MongoDB + express.js

Príspevok od používateľa aacid »

nejak stale nerozumiem ze kde je tvoj problem.

mas objekt projekt, ktory ma zoznam userov, teda ich idciek.
ked vytvaras novy projekt, vyberies si vsetkych userov zo zoznamu a na backende ich ulozis.
ten kod co si sem pastol je v pohode, otazne je ci musis robit tu validaciu mas alebo to vie aj mongoose spravit za teba.

k povodnej otazke, ked chces ulozit viac uzivatelov tak logicky nemozes vyberat iba jedneho, ze?

podla mna tvoj hlavny problem je ze robis iba backend... podla mna ovela praktickejsie je robit backend aj frontend naraz. skratka navrhnes stranku na vytvorenie noveho projektu, pokial tam potrebujes vytiahnut zoznam uzivatelov, tak spravit http get endpoint na backende a vytiahnes ich. ked budes mat vsetko co potrebujes tak to mozes poslat na backend a vtedy vytvoris zase http post endpoint kde to vsetko ulozis.
potom by si podla mna nemal taketo problemy.
*****HERO*****
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2236
Registrovaný: 08 máj 2006, 1:34

Re: BE - MongoDB + express.js

Príspevok od používateľa *****HERO***** »

nie je trochu neekologicke dopytovat sa na databazu v cykle po jednom id? nebolo by lepsie tam jednym dopytom poslat cele pole a az vysledok pripadne precyklit? predsa len je to dost okrajovy scenar (zmanipulovany vstup/user bol medzitym vymazany), ze to id v databaze nebude, tak mozno by si stacilo len vytiahnut pocet, porovnat so vstupom a v pripade neekvality nejak obecne vyfakovat usera.

tymto cyklom tiez nezvalidujes, ked ti z requestu pride [id1,id1,id1,id2,id3 ..] .. v mongu sa ti asi potom vytvori viacnasobne naviazanie na toho isteho usera

inak neviem co dalsie na tom komentovat, mozno len "req.body.user = req.user.userId" vyzera trochu fishy
ropman
Medium Professional
Medium Professional
Príspevky: 1220
Registrovaný: 12 apr 2010, 21:07

Re: BE - MongoDB + express.js

Príspevok od používateľa ropman »

S mongodb som dlho nerobil a uz si to moc ani nepamatam ale ta validacna logika by nemala byt v nejakom controlleri resp. v metode ktora riesi http request a response, ale bud na urovni databazy alebo ak na aplikacnej urovni tak v nejakom modeli alebo inej metode, ktora sa bude dat pouzit aj v inych requestoch. Lebo teraz ak by si chcel vytvorit projekt aj niekde inde tak to nemas ako elegantne urobit bez toho refactoringu, iba copy-paste.

To ze getujes userov z databazy po jednom je tiez trochu otazne ale v pripade mongodb tam asi nebude velky performance overhead oproti tomu keby si to getol vsetko naraz. Ale je mozne ze dost ludom sa pacit nebude, ked pocet dopytov na db je zavisly od velkosti vstupu.
aacid
Hardcore addict
Hardcore addict
Príspevky: 5439
Registrovaný: 22 nov 2006, 21:55
Bydlisko: BA

Re: BE - MongoDB + express.js

Príspevok od používateľa aacid »

ako pise HERO, miesto toho aby si to robil po jednom vies pouzit v mongoose $in operator, kde ti najde vsetky objekty ktorych id-cko je v array.

ropman:
tak on len overuje ci ten user existuje, to mi nepride ako nieco co sa oplati extrahovat do samotnej classy/funkcie/controlleru.
otazne je hlavne ci to vobec potrebuje, s nosql databazami nemam az take skusenosti (je to fuj podla mna :D) ale myslim ze aj v mongodb by si mal vediet robit nejake vazby ci foreign keys. v idealnom pripade to mas spravene tak ze z requestu vytiahnes IDcka userov, vlozis ich do array objektu a nasledne ked sa ho pokusis ulozit do databazy tak dostanes vynadane ze taky user neexistuje.
ropman
Medium Professional
Medium Professional
Príspevky: 1220
Registrovaný: 12 apr 2010, 21:07

Re: BE - MongoDB + express.js

Príspevok od používateľa ropman »

Momentalne ano, ale v buducnosti moze pri vytvarani projektu pribudnut aj nejaka dalsia logika alebo poziadavka na vytvaranie projektu aj z inych requestov. V idealnom pripade je takyto check na referencnu integritu dobre zabezpecit na strane DB, to ano, ale tiez neviem ci mongodb take nieco ma.
Napísať odpoveď