Как преобразовать проекцию пути в единый массив с помощью MongoDB?элегантный список повторяющихся подпунктов
Использование реальных данных, импортировать этот datapackage.json по
wget -c https://raw.githubusercontent.com/datasets/language-codes/master/datapackage.json
mongoimport -d lang_db -c lang_meta datapackage.json --jsonArray
предположить, что мне нужен список всех используемых в типы файлов ресурсов, повторяя ... Так что самый простой синтаксис db.lang_meta.distinct("resources.mediatype")
, не является решением этой проблемы ...
И db.lang_meta.find({},{"resources.mediatype":1}).pretty()
не производит один список, но сложный объект,
{"_id" : ObjectId("56011be94564569fc920eda4"),
"resources" : [
{
"mediatype" : "text/csv"
},
{
"mediatype" : "text/csv"
},
{
"mediatype" : "text/csv"
},
{
"mediatype" : "text/csv"
}
]}
для уменьшения сложности мы можем попробовать map()
,
var aux = 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;
});
var solution = aux[0];
но это не элегантный (!) ... Есть целый простой синтаксис в mongoBD для этого?
Этот вопрос связан с этим другом question/solution.
Сообщение об ошибке при использовании 'db.lang_meta.aggregate ({ "$ проект": { "ресурсы": { "$ карте": {" вход ":" $ resources "," as ":" el "," in ":" $$ el.mediatype "}}}})': exception: invalid operator '$ map' ' –
похоже, что вы использовали старую версию of MongoDB проверить это [примечание к выпуску] (http://docs.mongodb.org/manual/release-notes/2.6/) – Yogesh
Я нахожусь в Debian Stable и db.version() = 2.4.10, вы используете 'wget' и 'mongoimport', чтобы проверить ваш запрос? –