In MongoDB, mit $type
, ist es möglich, eine Suche basierend darauf zu filtern, ob das Feld mit einem BSON-Datentyp übereinstimmt (siehe DOCS ).
Für zB.
%Vor%was zurückgibt:
%Vor%Ich brauche eine Abfrage, die mir den tatsächlichen Feldtyp für jedes Feld in einer Sammlung angibt. Ist das mit MongoDB möglich?
OK, hier sind einige verwandte Fragen, die helfen können:
Ermitteln Sie alle Feldnamen mithilfe von Map-Reduce in einer Sammlung.
Hier ist eine rekursive Version , die alle möglichen Felder auflistet.
Hoffentlich können Sie damit beginnen. Ich vermute jedoch, dass Sie bei dieser Anfrage auf einige Probleme stoßen werden. Hier gibt es zwei Probleme:
$type
abfragen, aber es sieht nicht so aus, als könnten Sie tatsächlich eine gettype
-Funktion für ein Feld ausführen und diese Maps zurück zum BSON-Typ haben. Wenn Sie also davon ausgehen, dass Sie Problem Nr. 1 lösen können, dann sollten Sie Problem Nr. 2 mit einer kleinen Variation von "Get all field names" lösen können.
Es würde wahrscheinlich in etwa so aussehen:
%Vor% Sie würden also im Grunde das key
und das type of key value
(als Array) in der Map-Funktion ausgeben. Dann würden Sie von der Reduce-Funktion eindeutige Einträge für jeden Typ hinzufügen.
Am Ende des Laufs hätten Sie solche Daten
{"_id":[255], "name" : [1,5,8], ... }
Natürlich ist das alles eine Menge Arbeit, abhängig von Ihrem tatsächlichen Problem, Sie möchten vielleicht nur sicherstellen (aus Ihrem Code), dass Sie immer die richtige Art von Daten eingeben. Die Art der Daten zu finden, nachdem die Daten in der DB sind, ist definitiv ein Problem.
Geben Sie die folgende Abfrage in die Mongo-Shell ein
%Vor%Syntax
%Vor% Beachten Sie, dass a=5;a.constructor.toString()
druckt function Number() { [native code] }
, kann man etwas ähnliches tun:
db.collection.mapReduce(function() {
emit(this._id.constructor.toString().replace(/^function (\S+).+$/, ""), 1);
}, function(k, v) {
return Array.sum(v);
}, { out: { inline: 1 } });
Tags und Links mongodb aggregation-framework mongodb-query