2016-11-04 15 views
0

我有具有一個子文件的有效載荷,其具有可變數目fields.Sample 2蒙戈文件如下如何在不使用mongodb中的項目的情況下使用聚合獲得最高級別的子文檔字段?

{'key1': 'value1', 
'key2': 'value2', 
'payload': { 'pkey1':'pvalue1', 
       'pkey2':'pvalue2', 
      }  
} 
{'key1': 'value1', 
'key2': 'value2', 
'payload': { 'pkey1':'pvalue1', 
       'pkey2':'pvalue2', 
       'pkey3':'pvalue3', 

      }  
} 

一個mongodb的集合我想輸出到如下是:`

{'key1': 'value1', 
'key2': 'value2', 
'pkey1':'pvalue1', 
'pkey2':'pvalue2'  
} 
{'key1': 'value1', 
'key2': 'value2', 
'pkey1':'pvalue1', 
'pkey2':'pvalue2', 
'pkey3':'pvalue3' 
} 

我不想使用項目的原因是我不知道有效負載子文檔中有多少字段。我想將聚合的結果存儲到其他集合中。但我想使用for each數據量巨大因此完成操作需要很長時間。請指教。

回答

1

目前在聚合中沒有辦法做到這一點,您需要事先知道這些字段。但是這個功能可能會在下一個版本中引入。

你需要爲每個做,重塑新的文檔,到一個新的集合:

db.test.find().forEach(function(doc) { 
    var new_doc = {}; 
    for (var key in doc) { 

     if (key != 'payload'){ 
      new_doc[key] = doc[key] 
     } 
     else{ 
       for (var key in doc.payload) { 
        new_doc[key] = doc.payload[key] 
       }; 
     } 
    }; 
    db.test2.save(
     new_doc 
    ); 
}); 
相關問題