相關問題是Efficiently convert rows to columns in sql server。但是答案是針對SQL的。將行轉換爲MongoDB中的列
我想要相同的結果,即將行轉換爲列,而不在MongoDB中彙總任何內容(截至目前爲止)。
集合看起來如下所示。這是Facebook的頁面屬性統計:
timestamp | propName | propValue -------------------------------- 1371798000000 | page_fans | 100 -------------------------------- 1371798000000 | page_posts | 50 -------------------------------- 1371798000000 | page_stories | 25 --------------------------------
我需要回答如下:
timestamp | page_fans | page_posts | page_stories -------------------------------- 1371798000000 | 100 | 50 | 25 --------------------------------
的列名是預先確定的。他們不必動態生成。但問題是如何在MongoDB中實現這一點。
我認爲聚合對此目的沒有用處。我需要使用MapReduce嗎?但在這種情況下,我沒有什麼可以減少的我猜?那麼另一個選擇就是可以在代碼中獲取這些值並在編程語言中進行操作。 Java
任何見解都會有所幫助。提前致謝 :)!!!
EDIT(基於輸入從Schaliasos):
輸入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"
}
期望輸出JSON:
{
"timestamp" : NumberLong("1371798000000"),
"provider" : "Facebook",
"page_storytellers" : NumberLong(30871),
"page_fans" : NumberLong("1371798000000"),
"page_fan_adds" : NumberLong("1371798000000")
}
首先,MongoDB中有一個JSON格式的文檔。張貼您擁有的json和您想要返回的json,以便我們更好地理解它。其次,你爲什麼要這樣? – Schaliasos
這是在客戶端完成的最好的事情,我不會使用下面的答案來做到這一點,直到你遇到這樣的查詢縮放問題時,它不會很長。 – Sammaye