DataBases


# Introduction


# Commands


Theorie

  • noSQL Datenbank

  • Case-Sensitive (Groß- bzw. Kleinschreibung beachten!)

  • dokumentbasiert

  • ohne Schema

  • Unterstützt JSON Format

  • Unterstützt keine Fremdschlüssel (Foreign-Keys)

  • Unterstützt Sharing und Replikation

  • optimiert für Schreibleistung

    • gut geeignet für Echtzeit-Analysen, Content Management, …

Grundlegende Commands:

// alle Datenbanken anzeigen  
show dbs;  
  
// aktuelle Datenbank anzeigen  
db;  
  
// neue DB erzeugen  
use insy_3chit;  
  
// löschen einer DB; Achtung auf Zeitintervall bis zur Aktualisierung  
db.dropDatabase('insy_3chit');  
  
// neue Collection (Applikation) erzeugen  
db.createCollection('obstladen');  
  
// alle Collection anzeigen  
show collections;  
  
// einfügen eines neuen Dokumentes ("Datensatz")  
db.obstladen.insertOne({  
    name: "Banane",  
    price: 0.99,  
    category: 'Obst',  
    amount: 16  
});  
  
// anzeigen aller Dokumente  
db.obstladen.find();    // legt selber primary-key an (_id)

mehrere Dokumente einfügen:

// mehrere Dokumente einfügen  
db.obstladen.insertMany(  
    [  
        {  
            name: "Apfel Neu",  
            price: 0.80,  
            category: 'Obst',  
            amount: 10  
        },  
        {  
            name: "Apfel",  
            price: 0.60,  
            category: 'Obst',  
            amount: 2  
        },  
        {  
            name: "Kiwi",  
            price: 1.20,  
            category: 'Obst',  
            amount: 0,  
            ratings: [  
                { user: "Lassl", stars: 5},  
                { user: "Haul", stars: 4},  
                { user: "Muster", stars: 1}  
            ]  
        }  
    ]  
);

Ausgabe filtern

// filtern nach name="Apfel"  
db.obstladen.find({ name: "Apfel"});
 
// filtern nach Namen - aufsteigend/absteigend sortiert  
db.obstladen.find().sort({name: 1});  
db.obstladen.find().sort({name: -1});

Dokumente zählen

// Ergebnisse zählen  
db.obstladen.find().count();  
db.obstladen.countDocuments();

Index erstellen/löschen

// Feld Indexieren - für eine Suche erforderlich  
db.obstladen.createIndex(  
{ name: "text" },  
{ default_language: "german" }  
);  
  
// INdex löschen  
db.obstladen.dropIndex("name_text");  
  
// Indexe anzeigen  
db.obstladen.getIndexes();

Ausgabe einschränken und filtern

// Ergebnis einschränken (ersten 2 Datensätze)  
db.obstladen.find().limit(2);  
db.obstladen.find().sort( {price: 1}).limit(1);  
  
// Filterung nach größer, kleiner  
    // $gt, $gte, $lt, $lte, $eqdb.obstladen.find(  
    {  
    price: {$gt: 0.9}  
    }  
);
 
// Ergebnis filtern mit Kombinationen (Suchkriteriem, Ausgabe)  
    // _id = 0 - blendet Primary-Key aus
db.obstladen.find(  
{ category: "Obst" },  
{ _id: 0, name: 1, price: 1}  
);

Text suchen

// nach Text suchen  
db.obstladen.find(  
{  
    $text: { $search: "Apfel" }  
});

Dokumente Updaten

// Preis der Banane ändern
db.obstladen.updateOne(  
{ name: "Banane" },  
{  
    $set: { price: 2.99 }  
}  
);
 
// hinzufügen einer Kategorie (Gurke)  
db.obstladen.updateOne(  
{ name: "Gurke" },  
{  
    $set:  
    {  
        price: 5,  
        category: "Gemüse",  
        views: 0  
    }  
},  
{  
// wenn ein Objekt nicht existiert wird es so erstellt und aktualisiert  
upsert: true  
}  
);
 
// für alle Obst wird der Price auf 0.2 gesetzt  
db.obstladen.updateMany(  
{ category: "Obst" },  
{  
    $set: {  
        price: 0.2  
    }  
}  
);
 
// erhöhrt den Wert von views um +1  
db.obstladen.updateOne(  
{ name: "Gurke" },  
{  
    $inc: {  
        views: 1  
    }  
}  
);
 
// ein Feld umbenennen  
db.obstladen.updateOne(  
{ name: "Gurke" },  
{  
    $rename:  
    { views: "likes" }  
}  
);

Delete One/Many

// ein Dokument löschen  
db.obstladen.deleteOne({name: "Gurke"});  
  
// viele Dokumente löschen  
db.obstladen.deleteMany({category: "Obst"});
 
// Collection löschen
db.obstladen.drop();
 
// Datenbank löschen
db.dropDatabase("insy_3chit");

Redundanzen vermeiden

// .distinct()
db.Participant.distinct("courses.subject");