如何在不使用 mongodb 中的项目的情况下使用聚合获取顶层的子文档字段?

How can I get the sub document fields at the top level using aggregation without using project in mongodb?

我有一个 mongodb 集合,它有一个子文档有效负载,它有可变数量的 fields.Sample 两个 mongo 文档,如下所示

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

            }    
 }

我希望输出如下:`

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

我不想使用项目的原因是我不知道负载子中有多少字段 document.I 想将聚合结果存储到另一个 collection.I 正在考虑使用 for each 但是数据很大所以需要很多时间才能完成操作。请指教

目前无法在聚合中做到这一点,您需要提前了解字段。但是这个功能可能会在下一个版本中引入。

您需要为每个文档做一个,并将新文档重塑为一个新集合:

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
    );
});