@ü.li:Listing 1: JSON-Dokumente in einer MongoDB-Datenbank @li:{ "_id" : ObjectId("53f3a2450189571a95d57c6b"), "cass_nr" : 2, "aufnahme_nr" : 1, "cass_marke" : "scotch", "cass_laenge" : 180, "cass_typ" : "HS", "film_titel" : "Der gruene Bogenschuetze", "genre" : "krimi", "schauspieler" : [ "G. Froebe", " K. Kinski", " E. Arend" ], "film_laenge" : 90, "laenge_ings" : 0, "aender_datum" : "26.11.1986", "loeschbar" : "N", "besonderes" : undefined } // der folgende Titel hat keine Schauspieler { "_id" : ObjectId("53f3a2450189571a95d57c6e"), "cass_nr" : 3, "aufnahme_nr" : 2, "cass_marke" : "tdk", "cass_laenge" : 180, "cass_typ" : "HS", "film_titel" : "Tele-Skigymnastik 5", "genre" : "sach", "film_laenge" : 30, "laenge_ings" : 0, "aender_datum" : "18.11.1986", "loeschbar" : "N", "besonderes" : undefined } @ü.li:Listing 2: Anzeigen der Bezeichner (Keys) eines Dokuments @li:var doc = db.video2.findOne() for (i_key in doc) print(i_key) _id cass_nr aufnahme_nr cass_marke cass_laenge cass_typfilm_titel genre schauspieler film_laenge (...) @ü.li:Listing 3: Anzeigen der Bezeichner und deren Datentypen @li:for (i_key in doc) print(i_key, typeof doc[i_key]) _id object cass_nr number aufnahme_nr number cass_marke string cass_laenge number cass_typ string film_titel string genre string schauspieler object film_laenge number laenge_ings number aender_datum string loeschbar string besonderes object @ü.li:Listing 4: Anzeigen der Metadaten mit Hervorhebung der ObjectId @li:var doc=db.video2.findOne(); for (i_key in doc) { var val= doc[i_key]; if (val instanceof ObjectId) print("ObjID"); print(i_key, typeof doc[i_key]) }; ObjID _id object cass_nr number aufnahme_nr number cass_marke string cass_laenge number cass_typ string film_titel string genre string schauspieler object film_laenge number laenge_ings number aender_datum string loeschbar string besonderes object @ü.li:Listing 5: Arrays mit Datentyp anzeigen @li:for (i_key in doc) { var val= doc[i_key]; if (val instanceof ObjectId) print ("ObjID"); else if (val instanceof Array) print ("Array", typeof val[0]); print(i_key, typeof doc[i_key]) }; ObjID _id object cass_nr number aufnahme_nr number cass_marke string cass_laenge number cass_typ string film_titel string genre string !!!#Farbe#!!!Array string!!!#Farbe#!!! !!!#Farbe#!!!schauspieler object!!!#Farbe#!!! film_laenge number laenge_ings number aender_datum string loeschbar string besonderes object @ü.li:Listing 6: Erstes Beispiel für die mapFunktion @li:var MapFvideo2_2 = function(){for (var key in this) // Indexe der Keys { var keybez= this[key]; // der Bezeichner des Key var tp_key = typeof keybez; var output = ""; var outkey = key; if (keybez instanceof ObjectId) {outkey = outkey + " ObjID"; emit(outkey, 1);} else if (keybez instanceof Array) {outkey = outkey + " Array " + typeof keybez[0]; emit(outkey, 1); } else {outkey = outkey +" "+ tp_key ; emit(outkey, 1) ;} } }; @ü.li:Listing 7: Ausgabe der map-Funktion @li:key: _id ObjID value: 1 key: cass_nr number value: 1 key: aufnahme_nr number value: 1 key: cass_marke string value: 1 key: cass_laenge number value: 1 key: cass_typ string value: 1 key: film_titel string value: 1 key: genre string value: 1 key: schauspieler Array string value: 1 key: film_laenge number value: 1 key: laenge_ings number value: 1 key: aender_datum string value: 1 key: loeschbar string value: 1 key: besonderes object value: 1 @ü.li:Listing 8: Ergebnis des ersten Map-Reduce-Vorgangs @li:db.video_meta_2.find() { "_id" : "_id ObjID", "value" : 208 } { "_id" : "aender_datum string", "value" : 208 } { "_id" : "aufnahme_nr number", "value" : 204 } { "_id" : "aufnahme_nr object", "value" : 4 } { "_id" : "besonderes object", "value" : 193 } { "_id" : "besonderes string", "value" : 15 } { "_id" : "cass_laenge number", "value" : 208 } { "_id" : "cass_marke string", "value" : 208 } { "_id" : "cass_nr number", "value" : 208 } { "_id" : "cass_typ string", "value" : 208 } { "_id" : "film_laenge number", "value" : 171 } { "_id" : "film_laenge object", "value" : 37 } { "_id" : "film_titel string", "value" : 208 } { "_id" : "genre string", "value" : 208 } { "_id" : "laenge_ings number", "value" : 134 } { "_id" : "laenge_ings object", "value" : 74 } { "_id" : "loeschbar string", "value" : 208 } { "_id" : "schauspieler Array string", "value" : 208 } @ü.li:Listing 9: map-Funktion produziert die gesamte Struktur als Key @li:var MapFvideo2_5 = function(){ var output = {}; var jsonstr = String(); var newdoc = {}; var dq = String('"'); // doublequote var komma = String(', '); var klammerauf=String('{'); var klammerzu =String('}'); for (var key in this) // Indexe der Keys { var keybez= this[key]; var tp_key = typeof keybez; var outkey = key; var strpart = String(); // die keys auch in "" einschliessen outkey = dq+outkey+dq; if (keybez instanceof ObjectId) {outkey = outkey + " : " + dq + "ObjID" + dq;} else if (keybez instanceof Array) {outkey = outkey + " : " + dq +"Array " + typeof keybez[0] + dq;} else {outkey = outkey + " : " + dq + tp_key + dq}; strpart = strpart + outkey; print (strpart); jsonstr = jsonstr+strpart+komma; } // // das letzte Komma wieder entfernen var lastkomma = jsonstr.lastIndexOf(","); jsonstr=jsonstr.substr(0,(lastkomma)); // geschweifte Klammern um den String jsonstr=klammerauf+jsonstr+klammerzu; emit(jsonstr, 1); }; @ü.li:Listing 10: Abfrage der Kollektion der Metadaten (Auszug) @li:{ "_id" : "{\"_id\" : \"ObjID\", \"cass_nr\" : \"number\", \"aufnahme_nr\" : \"number\", \"cass_marke\" : \"string\", \"cass_laenge\": \"number\", \"cass_typ\" : \"string\", \"film_titel\" : \"string\", \"genre\" : \"string\", \"schauspieler\" : \"Arraystring\", \"film_laenge\" : \"number\", \"laenge_ings\" : \"number\", \"aender_datum\" : \"string\", \"loeschbar\" : \"string\", \"besonderes\" : \"object\"}", "value" : 119 } /* 1 */ { "_id" : "{\"_id\" : \"ObjID\", \"cass_nr\" : \"number\", \"aufnahme_nr\" : \"number\", \"cass_marke\" : \"string\", \"cass_laenge\": \"number\", \"cass_typ\" : \"string\", \"film_titel\" : \"string\", \"genre\" : \"string\", \"schauspieler\" : \"Arraystring\", \"film_laenge\" : \"number\", \"laenge_ings\" : \"number\", \"aender_datum\" : \"string\", \"loeschbar\" : \"string\", \"besonderes\" : \"string\"}", "value" : 11 } @ü.li:Listing 11: Umwandeln von Strings in JSON-Dokumente in neue Kollektion @li:var cursor=db.video_meta_5.find(); while (cursor.hasNext()){ c=cursor.next(); print (c); j=JSON.parse(c._id); jdoc = {"structure": j, "value" : c.value}; print (jdoc); db.meta5coll.insert(jdoc)}; @ü.li:Listing 12: Abfrage der Metadatenkollektion nach Keys @li:db.meta5coll.find({},{"structure.laenge_ings": 1, "structure.besonderes": 1, "value" : 1}) { "_id" : ObjectId("55c361fb6ff44c7b02e15e73"), "structure" : { "laenge_ings" : "number", "besonderes" : "object" }, "value" : 119 } /* 1 */ { "_id" : ObjectId("55c361fb6ff44c7b02e15e74"), "structure" : { "laenge_ings" : "number", "besonderes" : "string" }, "value" : 11 } /* 2 */ { "_id" : ObjectId("55c361fb6ff44c7b02e15e75"), "structure" : { "laenge_ings" : "object", "besonderes" : "object" }, "value" : 36 }