2016-11-04 81 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 
    ); 
}); 
相关问题