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