MongoDB-də bir kolleksiyanın şemasını necə tapmaq olar

MEAN Stack günümüzün ən inkişaf etmiş texnologiya kolleksiyalarından biridir. MongoDB ExpressJS AngularJS və NodeJS daxildir. Yalnız tam yığınla və ya MongoDB ilə işləməyinizdən asılı olmayaraq, bir nöqtədə verilənlər bazanızın nüsxəsini çıxarmaq və bərpa etmək istəyəcəksiniz. MongoDB-da yedəklənən məlumatlar ümumiyyətlə bson / json şəklində olur və MongoDB sənədlərində və StackOverflow kimi platformalarda asanlıqla mövcud olan əmrlərdən istifadə edərək bərpa edilə bilər.

MongoDB-da məlumatların bərpası və ehtiyat nüsxəsi cazibə kimi işləyərkən, MongoDB ehtiyat nüsxəsini idxal etmək istədiyiniz vaxtlar olur. Verilər üzərində işləməyə davam etmək üçün kolleksiyaların sxemlərini bilməlisiniz.

Şanslıysanız, şema sənədləriniz olacaq. Ancaq bunlar yoxdursa, kolleksiyanın sxemini öyrənmək üçün kolleksiyadakı məlumatları istifadə edə bilərsiniz. Sizə necə deyim

Şema obyektini / kolleksiyanın ilk sənədini aşağıdakılardan istifadə edərək əldə edə bilərik.

var schemaObj = db.users.findOne ();

Şemanı yazdırmaq üçün, artıq schemaObj-nin hər bir xüsusiyyətinin açarını və mülk növünü (məs. Sətir / nömrə və s.) Çap edə bilərik. Bunu etmək üçün, schemaObj-i giriş kimi qəbul edən və konsolda tələb olunan məlumatları çıxaran bir funksiya yazırıq.

PrintSchema (obj) funksiyası {for (obj in var açarı) {print (girinti, açar, obyekt növü [key]); }};

Yuxarıdakı funksiya sxemi yazdırır və nəticə budur:

Çox yaxşıdır. Qanun? Bununla belə, "loginInfo", "settings", "rollers" və "meta" obyekt kimi görünür və bir neçə alt xassəyə sahib ola bilər. Bu məlumatları da yazdırmaq istəyə bilərik (yəni yuvalanmış sxemləri çap edin). Bunu etmək üçün "printSchema" funksiyamızı və funksiya çağırış ifadəsini aşağıdakı kimi inkişaf etdiririk:

PrintSchema (obj, girinti) funksiyası {for (obj in var açarı) {print (girinti, açar, obyekt növü [key]); if (typeof obj [key] == "object") {printSchema (obj [key], girinti + "\ t")}}}; printSchema (schemaObj, "");

Yuxarıdakı kod indi aşağıdakı nəticəni verir:

Əla! Ancaq yuxarıdakı çıxışda da funksiyaları görə bilərəm. İstəmiriksə, funksiyanı bir az belə dəyişdirərək bunu tərk edə bilərik:

PrintSchema funksiyası (obj, girinti) {for (var obj-də) {if (typeof obj [key]! = "Funksiya") {// hər hansı bir funksiyanın yazdırılmasını istəmirik (girinti, açar, obyekt növü [açar], Növü); if (typeof obj [key] == "object") {// Əgər cari xassə obyekt tipindədirsə, tabe olunan xüsusiyyətlər də printSchema (obj [key], girinti + "\ t"); }}}};

PrintSchema funksiyamız artıq aşağıdakı nəticəni verir:

Qabaqcıl inkişaf etdiricilər üçün: (Əyləncəli olduğu üçün: P)

"_Created", "_last_modified" nin obyekt olduğunu görə bilərsiniz. Ancaq ümumiyyətlə bunlar, həqiqətən, Date obyektinin nümunələridir. Eynilə, rol xassəsi bir sıra sətir kimi görünür. PrintSchema funksiyamızı aşağıdakı kimi dəyişdirərək həqiqi məlumat növünü müəyyənləşdirə bilərik:

PrintSchema (obj, indent) funksiyası {for (obj-də var açarı) {if (typeof obj [key]! = "Function") {// hər hansı bir funksiyanı çap etmək istəmirik var specificDataTypes = [tarix, sıra]; // Yoxlanacaq xüsusi məlumat növlərini göstərin var type = ""; for (var i in specificDataTypes) {// loop [date, array] if (obj [key] instanceof specificDataTypes [i]) {// cari mülk məlumat tipinin bir nümunəsidirsə = "== is_" + specificDataTypes [i] .adı + "=="; // adını kəsmək; }} çap (girinti, açar, obyekt növü [açar], tip); // Konsolda çap et (məs. Rol obyekti is_Array) əgər (tip obj [key] == "object") {// Cari xüsusiyyət obyekt tipindədirsə, tabe olan xüsusiyyətlər də printSchema (obj [key], Girinti + "\ t"); }}}};
printSchema (geniş açılı görünüş)

Aşağıda bir istifadəçi şeması nümunəmiz üçün son nəticə verilmişdir:

Bax budur. Yuxarıda göstərilən metoddan istifadə edərək şemanı MongoDB-dəki bir kolleksiya sənədindən müvəffəqiyyətlə çıxara bilərsiniz. Şemanın nə qədər iç içə olmasından asılı olmayaraq şemanın bütün iyerarxiyası çıxır.

Şemanı çıxardıqdan sonra nümunə istifadə NodeJS-də Mongoose-un aşağıdakı istifadəsi ola bilər:

var userSchema = yeni mongoose.Schema ({loginInfo: {providerID: {type: String}, providerKey: {type: String}}, name: {type: string}, lastName: {type: String}, fullName: {type: String}, e-poçt: {type: String}, parol: {type: String}, duz: {type: String}, parametrlər: {preferLang: {type: String}, isReceiveNotification: {type: Boolean}, isReceiveEmail: { növü: Boolean},}, rolları: {type: Array}, status: {type: String}, meta: {_member: {type: String}, _version: {type: Number}, _created_by: {type: String}, _created: {type: Date}, _last_modified: {type: Date}, _owner: {type: String}, _modified_by: {type: String},}});

Yeni texnologiyaları sınamaq hər zaman əyləncəlidir. Bəzən oyuna girmək asandır, ancaq bir problemlə qarşılaşdığınızda və həllini tapa bilmədiyiniz zaman bu, həqiqətən bir ağrıdır. Nə qədər ciddi! İnkişaf əsnasında qarşılaşdığımız ən çılğın problemlərə həll yolları təklif edən hər kəsə xoşbəxtlik.