Ich finde den Befehl!! es ist nicht find()
:-)
db.lang_meta.distinct("resources.schema.fields.name")
(bearbeiten)
Ups, die "absolut richtige" Antwort ist eine Liste (wo Wiederholungen möglich sind) kein Set (wo keine Wiederholung auftritt). Siehe den Fall von db.lang_meta.distinct("resources.mediatype")
, wobei die richtige Lösung eine Liste mit vier wiederholten Elementen zurückgeben muss, nicht nur eine.
Für Liste wir können map()
verwenden ... Nun, angenommen nur ein Element, es wäre ...
db.lang_meta.find().map(function(c) {
return c.resources[0].schema.fields[0].name;
});
muss aber über .resources
iterieren und über .fields
, also
db.lang_meta.find().map(function(c) {
var ret = [];
for (var i=0; i<c.resources.length; i++)
for (var j=0; j<c.resources[i].schema.fields.length; j++)
ret.push( c.resources[i].schema.fields[j].name );
return ret;
});
... das ist nah, aber nicht die ideale (elegante) Lösung.
Zurück zu resources.mediatype
Beispiel, das ist eine bessere Veranschaulichung zu den "Repeat itens",
db.lang_meta.find().map(function(c) {
var ret = [];
for (var i=0; i<c.resources.length; i++)
ret.push( c.resources[i].mediatype );
return ret;
});
Das erzeugt "text/csv", "text/csv", "text/csv", "text/csv"
(!)aber in einer Array-of-Array-Struktur... kein einfaches Array.
Lösung?
Machen wir etwas mit db.lang_meta.find({},{"resources.schema.fields.name":1})
...