2012-07-05 167 views
3

我有类似结构的文档 -是否有查询从一个文档返回多个结果?

Doc { 
    "DocName": "DocName", 
    "Array": [{ 
     "Name": "Name1", 
     "Value": "Value1" 
    },{ 
     "Name": "Name2", 
     "Value": "Value2" 
    },{ 
     "Name": "Name3", 
     "Value": "Value3" 
    }] 
} 

是否可以查询蒙戈,使其在类似下面的格式返回多个文件?

{ 
    DocName: "DocName", 
    Name: "Name1", 
    Value: "Value1" 
}, 
{ 
    DocName: "DocName", 
    Name: "Name2", 
    Value: "Value2" 
}, 
{ 
    DocName: "DocName", 
    Name: "Name3", 
    Value: "Value3" 
} 
+1

您可以使用map-reduce。或者新的聚合框架(尚未发布)。 – 2012-07-05 10:34:20

+0

你现在可以使用[Aggregation framework](http://docs.mongodb.org/manual/aggregation/) – 2013-04-18 07:44:20

回答

3

随着mapReduce

记录对象:

> db.doc.findOne(); 
{ 
    "_id" : ObjectId("4ff5925327064149c3d7a31f"), 
    "docname" : "lorem", 
    "array" : [ 
    { 
     "name" : "John", 
     "value" : "Blond" 
    }, 
    { 
     "name" : "Eric", 
     "value" : "Brown" 
    } 
    ] 
} 

地图功能:

map = function() { 
    var docname = this.docname; 
    this.array.forEach(function (item) { 
    emit(item, {'docname': docname}); 
    }); 
} 

Reduce函数:

reduce = function(key, value) { 
    return value; 
} 

把它一起:

res = db.doc.mapReduce(map, reduce, { out: 'output' }); 

查询:

db.output.find(); 

结果:

{ "_id" : { "name" : "Eric", "value" : "Brown" }, "value" : { "docname" : "lorem" } } 
{ "_id" : { "name" : "John", "value" : "Blond" }, "value" : { "docname" : "lorem" } } 

这不完全是你想要的,但它应该让你开始。

相关问题