Mit map/reduce für die Zuordnung der Eigenschaften in einer Sammlung

Update: follow-up zu MongoDB Erhalten Namen aller Schlüssel in collection.

Wie bereits von Kristina, kann man mit Mongodb 's map/reduce", um die Liste der Schlüssel in einer Sammlung:

db.things.insert( { type : ['dog', 'cat'] } );
db.things.insert( { egg : ['cat'] } );
db.things.insert( { type :  [] }); 
db.things.insert( { hello : []  } );

mr = db.runCommand({"mapreduce" : "things",
"map" : function() {
    for (var key in this) { emit(key, null); }
},  
"reduce" : function(key, stuff) { 
   return null;
}}) 

db[mr.result].distinct("_id")

//output: [ "_id", "egg", "hello", "type" ]

Solange wir wollen nur die Tasten befindet sich auf der ersten Ebene der Tiefe, diese funktioniert einwandfrei. Allerdings wird es nicht abrufen Sie diese Schlüssel, die sich auf tieferen Ebenen. Wenn wir hinzufügen eines neuen Datensatzes:

db.things.insert({foo: {bar: {baaar: true}}})

Und wir laufen wieder den map-reduce +verschiedene snippet oben, erhalten wir:

[ "_id", "egg", "foo", "hello", "type" ] 

Aber wir werden nicht die bar und die baaar Tasten, die Ineinander verschachtelt sind unten in der Daten Struktur. Die Frage ist: wie Kriege ich alle Schlüssel, egal, Ihr Niveau der Tiefe? Idealerweise würde ich gerne das Skript zu Fuß nach unten, um alle level von Tiefe und produziert eine Ausgabe wie:

["_id","egg","foo","foo.bar","foo.bar.baaar","hello","type"]      

Vielen Dank im Voraus!

  • Gibt es trotzdem kann ich alle Tasten (inklusive doppelte)?
InformationsquelleAutor Andrea Fiore | 2010-06-08
Schreibe einen Kommentar