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

Mongo _id pro pole vnořených dokumentů

Předpokládám:

{
    g: [
        { _id: ObjectId(), property: '' },
        // next
    ]
}

Typ struktury pro tuto otázku.

Normálně ne. _id s jsou jedinečné identifikátory pro entity. Jako takové, pokud chcete přidat _id v objektu vnořeného dokumentu, pak jste možná svá data nenormalizovali příliš dobře a mohlo by to být známkou zásadní chyby v návrhu schématu.

Dílčí dokumenty jsou navrženy tak, aby obsahovaly opakující se data pro daný dokument, tj. adresy nebo uživatele nebo tak něco.

To znamená _id není vždy špatné přidat. Vezměte si příklad, který jsem právě uvedl s adresami. Představte si, že byste měli systém nákupního košíku a (z nějakého důvodu) jste nereplikovali adresu do dokumentu objednávky, pak byste použili _id nebo nějaký jiný identifikátor pro získání tohoto dílčího dokumentu.

Musíte také vzít v úvahu propojení dokumentů. Pokud toto _id popisuje jiný dokument a vlastnosti jsou vlastní atributy pro tento dokument ve vztahu k tomuto propojenému dokumentu, pak je to také v pořádku.

ObjectId je stále poměrně velké, takže je třeba vzít v úvahu menší, méně unikátní id nebo nepoužívat _id vůbec pro dílčí dokumenty.

U indexů to ve skutečnosti nefunguje jinak než standardní _id pole v dokumentu samotném a jedinečný index napříč polem by měl fungovat v celé kolekci (závisí na scénáři, otestujte své dotazy).

Poznámka:MongoDB nepřidá _id na dílčí dokumenty pro vás.




  1. Nainstalujte mongodb na mac os 10.15 pro php7

  2. Jaký je rozdíl mezi těmito dvěma dotazy MongoDB?

  3. elegantní seznam opakovaných podpoložek

  4. MongoDB počet nových dokumentů za minutu na základě _id