MongoDB няма каскадни изтривания. Когато вашето приложение изтрие данни, то също е отговорно за премахването на всички посочени обекти и всички препратки към изтрития документ. Но обикновено, когато използвате on delete
в релационна база данни имате случай на композиция, при който един родителски обект притежава един или повече дъщерни обекти, а дъщерните обекти са безсмислени без родителя. В тази ситуация MongoDB насърчава вграждането вместо препращането . Това означава, че създавате масив в родителския обект и поставяте пълните дъщерни документи в този масив, вместо да ги държите в собствена колекция. По този начин те ще бъдат изтрити заедно с родителя, защото те са част от него.
Докато запазването на повече от една стойност в едно поле е абсолютно забранено в SQL, няма нищо лошо в това в MongoDB. Това е така, защото езикът за заявки MongoDB може лесно да работи с масиви и вградени обекти. Можете дори да създавате индекси върху полета на поддокументи в масиви, така че да можете лесно да търсите обекти, които са вградени в други обекти.
Когато все пак искате да препращате към обекти от друга колекция, можете или да използвате DBRef, или да използвате всеки друг уникален идентификатор (уникалността е едно от малкото неща, които могат да бъдат наложени от MongoDB. За да направите това, създайте уникален индекс с командата createIndex ). Но MongoDB не налага последователност в този случай. Можете да създадете DBRefs, които сочат към несъществуващи ObjectIds и когато документът, към който DBRef сочи, бъде изтрит, нищо няма да се случи. Приложението е отговорно да гарантира, че когато изтрие документ, всички документи, които го препращат, се актуализират.
Ограниченията също не могат да бъдат наложени от MongoDB. Той дори не може да наложи конкретен тип за поле, поради безсхемния характер на MongoDB. Отново, вашето приложение е отговорно да гарантира, че данните, които поставя в mongodb, следват конкретни спецификации. Когато искате да автоматизирате това, има рамки за обектно-релационно картографиране за MongoDB за много налични езици за програмиране.
За да приключим всичко: MongoDB не е толкова "умен" като SQL базите данни. Само по себе си не прави много. Той прави това, което му е казано от приложението, не повече и не по-малко. Но това е причината да е толкова бърз (без скъпи проверки за съгласуваност) и гъвкав (не са необходими модификации на базата данни за внедряване на нови функции).