sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB a Mongoose:Vnořené pole referenčních ID dokumentů

K vaší první otázce:

Konkrétně žádáte o lepší způsob práce s dětskými id, které jsou uloženy v nadřazeném objektu. Jsem si docela jistý, že neexistuje lepší způsob, jak se s tím vypořádat, pokud to musí být tento vzorec.

Tento problém však existuje i v relačních databázích. Pokud chcete uložit svůj příspěvek do relační databáze (s použitím tohoto vzoru), musíte také nejprve vytvořit komentář, získat jeho ID a poté příspěvek aktualizovat. Je pravda, že všechny tyto úkoly můžete odeslat v jedné žádosti, což je pravděpodobně efektivnější než použití mongoose, ale typ práce, kterou je třeba provést, je stejný.

K vaší druhé otázce:

Výhodou oproti variantě A je to, že můžete například získat příspěvek a okamžitě vědět, kolik komentářů má, aniž byste požadovali, aby mongodb prošel pravděpodobně stovky dokumentů.

Výhodou oproti variantě B je, že můžete uložit více referencí na komentáře v jednom dokumentu (jednom příspěvku), než celý komentáře, kvůli mongos 16MB document-size-limit.

Nevýhodou je však ta, kterou jste zmínil, že je neefektivní udržovat tuto strukturu. Domnívám se, že toto je pouze příklad pro předvedení scénáře, takže bych udělal toto:případ od případu bych se rozhodl, co použít.

  • Pokud se dokument bude hodně číst a málo do něj zapisovat, A je nepravděpodobné, že bude větší než 16 MB:Vložte dílčí dokument. tímto způsobem můžete získat všechna data v jediném dotazu.

  • Pokud potřebujete odkazovat na dokument z více další dokumenty A vaše data musí být skutečně konzistentní, pak nemáte jinou možnost, než na ně odkazovat.

  • Pokud potřebujete odkazovat na dokument z více další dokumenty ALE datová konzistence není příliš důležitá A platí omezení z první odrážky, poté vložte dílčí dokumenty a napište kód, aby byla vaše data konzistentní.

  • Pokud potřebujete odkazovat na dokument z více do jiných dokumentů a zapisují se do mnoha, ale nečtou se tak často. Pravděpodobně je lepší na ně odkazovat, protože je jednodušší kódovat, protože pro synchronizaci duplicitních dat nemusíte psát kód.

V tomto konkrétním případě (příspěvek/komentář) odkazování na rodiče od dítěte (informování dítěte o rodičích _id ) je pravděpodobně dobrý nápad, protože se snáze udržuje než naopak a dokument by mohl narůst větší než 16 MB, pokud by byly vloženy přímo. Pokud bych si byl jistý, že dokument NEBUDE větší než 16 MB, bylo by lepší je vložit, protože je rychlejší dotazovat se na data tímto způsobem




  1. Jak mohu zajistit, aby Webmachine a eredis spolupracovaly?

  2. Aktualizace hodnoty Redis

  3. Redis:Vrátí všechny hodnoty uložené v databázi

  4. Zpětné volání při provozu MongoDB s Node.js