The relevant question is Efficiently convert rows to columns in sql server. But the answer is specific to SQL.
I want the same result i.e. pivot row to column without aggregating anything (as of now) in MongoDB.
The collection looks something as below. These are statistics of facebook page properties:
timestamp | propName | propValue -------------------------------- 1371798000000 | page_fans | 100 -------------------------------- 1371798000000 | page_posts | 50 -------------------------------- 1371798000000 | page_stories | 25 --------------------------------
I need answer like:
timestamp | page_fans | page_posts | page_stories -------------------------------- 1371798000000 | 100 | 50 | 25 --------------------------------
The column names are pre-determined. They don't have to be generated dynamically. But question is how to achieve this in MongoDB.
I believe aggregation is of no use for this purpose. Do I need to use MapReduce? But in that case I have nothing to reduce I guess? Well another option could be fetching these values in code and do the manipulation in programming language e.g. Java
Any insights would be helpful. Thanks in advance :)!!!
EDIT (Based on input from Schaliasos):
Input JSON:
{
"_id" : ObjectId("51cd366644aeac654ecf8f75"),
"name" : "page_storytellers",
"pageId" : "512f993a44ae78b14a9adb85",
"timestamp" : NumberLong("1371798000000"),
"value" : NumberLong(30871),
"provider" : "Facebook"
}
{
"_id" : ObjectId("51cd366644aeac654ecf8f76"),
"name" : "page_fans",
"pageId" : "512f993a44ae78b14a9adb85",
"timestamp" : NumberLong("1371798000000"),
"value" : NumberLong(1291509),
"provider" : "Facebook"
}
{
"_id" : ObjectId("51cd366644aeac654ecf8f77"),
"name" : "page_fan_adds",
"pageId" : "512f993a44ae78b14a9adb85",
"timestamp" : NumberLong("1371798000000"),
"value" : NumberLong(2829),
"provider" : "Facebook"
}
Expected Output JSON:
{
"timestamp" : NumberLong("1371798000000"),
"provider" : "Facebook",
"page_storytellers" : NumberLong(30871),
"page_fans" : NumberLong("1371798000000"),
"page_fan_adds" : NumberLong("1371798000000")
}