Reputation: 2563
I have a document with a structure like -
Doc {
"DocName": "DocName",
"Array": [{
"Name": "Name1",
"Value": "Value1"
},{
"Name": "Name2",
"Value": "Value2"
},{
"Name": "Name3",
"Value": "Value3"
}]
}
Is it possible to query Mongo so that it will return multiple documents in a format like the one below?
{
DocName: "DocName",
Name: "Name1",
Value: "Value1"
},
{
DocName: "DocName",
Name: "Name2",
Value: "Value2"
},
{
DocName: "DocName",
Name: "Name3",
Value: "Value3"
}
Upvotes: 3
Views: 1893
Reputation: 2913
With mapReduce
Record object:
> db.doc.findOne();
{
"_id" : ObjectId("4ff5925327064149c3d7a31f"),
"docname" : "lorem",
"array" : [
{
"name" : "John",
"value" : "Blond"
},
{
"name" : "Eric",
"value" : "Brown"
}
]
}
Map function:
map = function () {
var docname = this.docname;
this.array.forEach(function (item) {
emit(item, {'docname': docname});
});
}
Reduce function:
reduce = function(key, value) {
return value;
}
Bringing it together:
res = db.doc.mapReduce(map, reduce, { out: 'output' });
The query:
db.output.find();
The result:
{ "_id" : { "name" : "Eric", "value" : "Brown" }, "value" : { "docname" : "lorem" } }
{ "_id" : { "name" : "John", "value" : "Blond" }, "value" : { "docname" : "lorem" } }
It's not exactly what you want but it should get you started.
Upvotes: 4