Órai példa feladatok - 2016

A JSON dokumentumok szerkezete a 2-5. feladatokhoz

{
    "_id"             : ObjectId("571f9b82371614fae065481e")
,   "username"        : "amiller0"
,   "first_name"      : "Adam"
,   "last_name"       : "Miller"
,   "email"           : "[email protected]"
,   "gender"          : "Male"
,   "ip_address"      : "160.105.53.148"
,   "likes"           : "[{\"name\":\"SBT\",\"measure\":7}]"
,   "sick"            : "false"
,   "dob"             : "1994-09-17"
,   "row_id"          : 1
,   "domain"          : "etsy.com"
,   "url"             : "http://nbcnews.com/neque/vestibulum.json"
,   "language"        : "Māori"
,   "coutry"          : "United States"
,   "state"           : "Arizona"
,   "postal_code"     : 85271
,   "street"          : "699 Nevada Hill"
,   "money"           : "$52.84"
}

1. feladat - modellezés

A feladat a megadott adatok alapján olyan JSON struktúrák elkészítése és definiálása, amelyek optimális módon teszik lehetővé az információk tárolását.

Az űrhajókat akárhány asztronauta vezetheti, s az egyes asztronauták akárhány űrhajóhoz tartozhatnak. Az asztronauták rendelkezhetnek valahány diplomával. Az asztronauták a megadott helyen laknak.

A tárolandó adatok: Űrhajó (név, ország), Asztronauta (név, életkor), Diploma (szak, végzés_éve), Lakhely (helység, cím)

Asztronauta:

{
    "_id"         : ObjectId("BBB")
,   "név"         : "Kiss Pista"
,   "életkor"     : 35
,   "lakhely"     : {
        "helység"    : "Veszprém"
    ,   "cím"        : "Kossuth u. 11."
    }
,   "diploma"     : [
        {
            "végzés_éve"    : 2001
        ,   "szak"            : "fedélzeti mérnök"
        }
    ,   {
            "végzés_éve"    : 2003
        ,   "szak"            : "anyagmérnök"
        }
    ]
}

asztronauta__űrhajó:

{
    "_id"                 : ObjectId("ZZZ")
,   "_id__űrhajó"         : ObjectId("AAA")
,   "_id__asztronauta"    : ObjectId("BBB")
}

űrhajó:

{
    "_id"        : ObjectId("AAA")
,   "név"        : "Szputnyik"
,   "ország"     : "Oroszország"
}

2. feladat - Mongo algoritmus 1.

Hozz létre az egyes objektumokhoz a users collection-ben egy name nevezetű kulcsot, melynek az értéke egy olyan JSON (aldokumentum) legyen, amelybe a first_name és last_name attribútumokat helyezed át!

var cursor = db.users.find(); // lekérdezzük az összes felhasználót
var doc; // ebben a változóban tároljuk majd mindig az aktuális dokumentumot

// végigiterálunk az összes felhasználón EGYESÉVEL
while ( cursor.hasNext() ) {

    // az aktuális dokumentum lekérése a kurzorból
    doc = cursor.next();

    // aldokumentum létrehozása + feltöltése adatokkal
    doc.name = {
        // új string objektumot hozunk létre a + művelettel
        "first" : "" + doc.first_name,
        "last"     : "" + doc.last_name
    };

    // felesleges kulcsok törlése
    delete doc.first_name;
    delete doc.last_name;

    // elmentjük a módosított dokumentumot
    db.users.save(doc);
}

3. feladat - Mongo algoritmus 2.

Parse-old át tömbbé a users collection-ben lévő dokumentumok likes nevü kulcs értékét!

var cursor = db.users.find();
var doc;

while ( cursor.hasNext() ) {
    doc = cursor.next();

    // stringgé alakított tömb parse-olása tömb objektummá
    doc.likes = JSON.parse( doc.likes );

    db.users.save(doc);
}

4. feladat - Mongo algoritmus 3.

Az domain nevet bontsd fel két karakterlánccá a . karakter mentén, majd tárold el a két string-et sld és tld néven!

var cursor = db.users.find();
var doc;

while ( cursor.hasNext() ) {
    doc = cursor.next();

    var arrTmp = doc.domain.split(" ");
    doc.sld = arrTmp[0];
    doc.tld = arrTmp[1];

    delete doc.domain;

    db.users.save(doc);
}

5. feladat - Mongo algoritmus 4.

Alakítsd vissza (fűzd össze) az sld és tld kulcsok értékeit domain névvé!

var cursor = db.users.find();
var doc;

while ( cursor.hasNext() ) {
    doc = cursor.next();

    doc.domain = doc.sld + "." + doc.tld;

    delete doc.sld;
    delete doc.tld;

    db.users.save(doc);
}