Ó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);
}