如何在不使用 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
);
});
我有一个 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
);
});