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

时间:2016-11-04 07:15:10

标签: mongodb mongodb-aggregation

我有一个mongodb集合,其中有一个子文档有效负载,其中包含可变数量的字段。示例两个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'
}

我不想使用项目的原因是我不知道有效负载子文档中有多少字段。我想将聚合的结果存储到另一个集合。我正在考虑使用但是每个数据都很庞大因此完成操作需要很多时间。请指教。

1 个答案:

答案 0 :(得分: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
    );
});