Kuidas leida MongoDB-st kollektsiooni skeem

MEAN stack on tänapäeval üks nõudlikumaid tehnoloogiakogusid. See hõlmab MongoDB ExpressJS AngularJS ja NodeJS. Kuid hoolimata sellest, kas töötate ainult kogu korstna või ainult MongoDB-ga, soovite mingil hetkel oma andmebaasi varundada ja taastada. MongoDB-s varundatud andmed on tavaliselt bson / json-i kujul ja neid saab taastada käskude abil, mis on hõlpsasti kättesaadavad MongoDB-i dokumentides ja platvormidel, nagu näiteks StackOverflow.

Kuigi andmete taastamine ja varundamine MongoDB-s töötab nagu võlu, võiksite mõnikord importida MongoDB-i varukoopia. Ja andmetega töötamise jätkamiseks peaksite teadma kogude skeeme.

Kui teil veab, on teil skeemifailid olemas, kuid kui teil neid pole, saate ikkagi kogu teada saada, kasutades kollektsioonis sisalduvaid andmeid. Las ma ütlen teile, kuidas.

Skeemiobjekti / kollektsiooni esimese dokumendi saame järgmiselt:

var schemaObj = db.users.findOne ();

Skeemi printimiseks saame printida skeemiObj iga omaduse võtme ja atribuudi tüübi (nt string / number jne). Kirjutame selle jaoks funktsiooni, mis võtab sisendina schemaObj ja prindib konsoolile vajaliku teabe.

funktsioon printSchema (obj) {
        jaoks (var võti obj) {
            print (taane, võti, tüüp obj [võti]);
        }
    };

Ülaltoodud funktsioon prindib skeemi ja väljund on:

See on lahe. Õige? Kuid tundub, et “loginInfo”, “seaded”, “rollid” ja “meta” on objektid ja neil võib olla mitu alamomadust. Võib-olla soovime ka seda teavet (st printida välja pesastatud skeemid). Parandagem selleks funktsiooni „printSchema” ja funktsiooni väljakutse avaldust järgmiselt:

funktsioon printSchema (obj, taane) {
        jaoks (var võti obj) {
            print (taane, võti, tüüp obj [võti]);
            if (typeof obj [key] == "object") {
                printSchema (obj [võti], taane + "\ t")
            }
        }
    };
printSchema (schemaObj, "");

Ülaltoodud kood prindib järgmise väljundi nüüd:

Tore! Kuid ma näen funktsioone ka ülaltoodud väljundis. Kui me seda ei soovi, võime need ära jätta, muutes funktsiooni natuke järgmiselt:

funktsioon printSchema (obj, taane) {
    jaoks (var võti obj) {
        if (typeof obj [key]! = "function") {// me ei soovi funktsioone printida
           print (taane, võti, tüüp obj [võti], tüüp);
            if (typeof obj [key] == "object") {// kui praegune atribuut on objekti tüüp, siis printige ka selle alamomadused
                printSchema (obj [võti], taane + "\ t");
            }
        }
    }
};

Meie funktsioon printSchema annab järgmise väljundi:

Edasijõudnutele: (kuna see on lõbus: P)

Võite märgata, et “_created”, “_last_modified” on objektid. Kuid tavaliselt on need tegelikult kuupäevaobjekti eksemplarid. Sarnaselt näib, et rollide omadus sarnaneb keelpillidega. Tegeliku andmetüübi saamiseks muutke funktsiooni printSchema järgmiselt:

funktsioon printSchema (obj, taane) {
    jaoks (var võti obj) {
        if (typeof obj [key]! = "function") {// me ei soovi funktsioone printida
            var specificDataTypes = [kuupäev, massiiv]; // määrake konkreetsed andmetüübid, mida soovite kontrollida
            var type = "";
            jaoks (var i in specificDataTypes) {// ülekanne [kuupäev, massiiv]
                if (obj [võti] instanceDpecDataTypes [i]) {// kui praegune atribuut on DataType'i eksemplar
                        type = "== is_" + specificDataTypes [i] .name + "=="; // saada selle nimi
                        vaheaeg;
                }
            }
            print (taane, võti, tüüp obj [võti], tüüp); // printige konsoolile (nt rollide objekt on array)
            if (typeof obj [key] == "object") {// kui praegune atribuut on objekti tüüp, siis printige ka selle alamomadused
                printSchema (obj [võti], taane + "\ t");
            }
        }
    }
};
printSchema (lainurkvaade)

Allpool on meie kasutaja skeemi näite lõplik väljund:

Siin see on. Ülaltoodud meetodi abil saate skeemi MongoDB kollektsiooni dokumendist edukalt ekstraheerida. Ja see prindib skeemi täieliku hierarhia, olenemata sellest, kui skeem on pesastatud.

Pärast skeemi ekstraheerimist oleks näidiskasutus Mongoose kasutamisel NodeJS-is järgmine:

var userSchema = new mongoose.Schema ({
 loginInfo: {
     pakkuja ID: {tüüp: keel},
     ProvideKey: {tüüp: keel}
 },
 eesnimi: {tüüp: keel},
 perekonnanimi: {tüüp: keel},
 fullName: {type: String},
 e-post: {tüüp: keel},
 parool: {tüüp: keel},
 sool: {tüüp: keelpill},
 seaded: {
     preferLang: {tüüp: keel},
     isReceiveNotification: {tüüp: tõeväärtus},
     isReceptionEmail: {tüüp: tõeväärtus},
 },
 rollid: {tüüp: massiiv},
 olek: {tüüp: keelpill},
 meta: {
     _liige: {tüüp: keelpill},
     _versioon: {tüüp: arv},
     _created_by: {type: String},
     _loodud: {tüüp: kuupäev},
     _last_modified: {tüüp: kuupäev},
     _omanik: {tüüp: keelpill},
     _modified_by: {type: String},
 }
});

Uute tehnoloogiate proovimine on alati lõbus. Mõnikord jõuate mängu hõlpsalt, kuid kui takerdute mõnda probleemi ja ei leia lahendust, uskuge mind, see on tõeline valu. Nagu tõsiselt! Rõõmutab kõiki, pakkudes lahendusi kõige hullematele probleemidele, millega arenduse ajal silmitsi seisame.