【发布时间】:2015-09-23 07:21:22
【问题描述】:
如何使用 MongoDB 将路径投影转换为单个数组?
使用真实数据,通过
导入datapackage.jsonwget -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];
但是它并不优雅(!)... mongoDB中有一个简单的语法可以做到这一点?
这个问题与另一个question/solution有关。
【问题讨论】:
标签: mongodb