2. kisZH megoldása

Collection flexibilis sémája

A books collection a következő flexibilis sémájú dokumentumokkal rendelkezik:

{
    "cim"               : "A szürke ötven árnyalata"
,   "kiadas_datuma"     : 2012
,   "szerzo"            : "E. L. James"
,   "tipus"             : ["erotikus", "romantikus", "dráma"]
,   "leiras"            : "Az erotikus, mulattató és mélyen megindító..."
}

1. feladat

Listázd ki a 2000 előtt vagy 2010 után megjelent könyveket!

(A 2000 előtt vagy 2010 után 2 feltételnek minősül, ezért külön kell őket vennünk az $or tömbben.)

db.books.find(
    {
        "$or" : [
            {
                "kiadas_datuma" : {
                    "$lt" : 2000
                }
            }
        ,   {
                "kiadas_datuma" : {
                    "$gt" : 2010
                }
            }
        ]
    }
);

2. feladat

Listázd ki azon könyveknek a szerzőjét és címét, amelyeknek a szerzője T betűvel kezdődik!

db.books.find(
    {
        "szerzo"     : /^T/
    }
,   {
        "szerzo"     : 1
    ,   "cim"        : 1
    }
);

3. feladat

Listázd ki az első 10 könyvet a kiadás dátuma szerint növekvő, míg a cím szerint csökkenő sorrendben!

(Ebben az esetben a limit() kurzorfüggvény meghívása csakis a sort() függvény meghívása után történhet, mert először a collection teljes tartalmát rendezzük növekvő sorrendbe, majd ezt követően limitáljuk az első 10-re a könyvek számát.)

db.books.find().sort({ "kiadas_datuma" : 1, "cim" : -1 }).limit( 10 );

4. feladat

Szúrj be 2 új dokumentumot a books collection-be egyetlen egy parancs kiadásával!

db.books.insertMany(
    [
        {
            "cim"        : "A sötét ötven árnyalata"
        ,   "szerzo"     : "E. L. James"
        }
    ,   {
            "cim"        : "A szabadság ötven árnyalata"
        ,   "szerzo"     : "E. L. James"
        }
    ]
);

5. feladat

Töröld ki az összes olyan könyvet, amelynek a leírása tartalmazza a "könyv" szót!

(A remove() függvény 2. paramétere boolean típusú, s nem egy JSON, pláne nem egy {multi : true} JSON! Ne keverd az update()-tel! A remove() alapértelmezetten az összes kritériára illeszkedő dokumentumot törli, ellentétben az update()-tel.)

db.books.deleteMany(
    {
        "leiras" : /könyv/
    }
);

6. feladat

Minden 2015 vagy azután kiadott könyv kiadási dátumát növeld meg 5-tel, ill. a típus tömbhöz add hozzá az "új" típust!

(A 2. paraméter JSON-ban egyszerre akár több módosító művelet ($push, $pull, $set, $inc, stb.) is megadható.)

db.books.updateMany(
    {
        "kiadas_datuma" : {
            "$gte" : 2015
        }
    }
,   {
        "$inc" : {
            "kiadas_datuma" : 5
        }
    ,   "$push" : {
            "tipus" : "új"
        }
    }
);

7. feladat

Módosítsd a szerzőjét Anonymous-ra az összes olyan könyvnek, amelynek a kiadási dátuma nem 2015!

db.books.updateMany(
    {
        "kiadas_datuma" : {
            "$ne" : 2015
        }
    }
,   {
        "$set" : {
            "szerzo" : "Anonymous"
        }
    }
);