在MongoDB中合并/聚合多个文档
在MongoDB中合并/聚合多个文档,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我的聚合有点问题。我收集了大量具有以下模式的平面文档: { _id:ObjectId("5dc027d38da295b969eca568"), emp_no:10001, salary:60117, from_date:"1986-06-26", to_date:"1987-06-26" } 这都是关于员工的年薪。数据是从关系数据库导出的,因此有多个文档具有相同的“emp_no”值,但其其余属性不同。我需要通过属性“emp_no”的值来聚合它们,因此我将得到如下结果: //
我的聚合有点问题。我收集了大量具有以下模式的平面文档:
{
_id:ObjectId("5dc027d38da295b969eca568"),
emp_no:10001,
salary:60117,
from_date:"1986-06-26",
to_date:"1987-06-26"
}
这都是关于员工的年薪。数据是从关系数据库导出的,因此有多个文档具有相同的“emp_no”值,但其其余属性不同。我需要通过属性“emp_no”的值来聚合它们,因此我将得到如下结果:
//one document
{
_id:ObjectId("5dc027d38da295b969eca568"),
emp_no:10001,
salaries: [
{
salary:60117,
from_date:"1986-06-26",
to_date:"1987-06-26"
},
{
salary:62102,
from_date:"1987-06-26",
to_date:"1988-06-25"
},
...
]
}
//another document
{
_id:ObjectId("5dc027d38da295b969eca579"),
emp_no:10002,
salaries: [
{
salary:65828,
from_date:"1996-08-03",
to_date:"1997-08-03"
},
...
]
}
//and so on
最后但并非最不重要的一点是,有将近290万个文档,因此通过“emp_no”手动聚合会有点问题
是否有一种方法可以仅使用mongo查询来聚合它们?我怎么做这种事?提前感谢您的帮助聚合管道的组阶段可用于获取此类聚合。指定要按其分组的属性作为分组阶段中
\u id
字段的值
下面的查询如何为您工作
db.collection.aggregate([
{
"$group": {
"_id": "$emp_no",
"salaries": {
"$push": {
"salary": "$salary",
"from_data": "$from_date",
"to_data": "$to_date"
}
},
"emp_no": {
"$first": "$emp_no"
},
"first_document_id": {
"$first": "$_id"
}
}
},
{
"$project": {
"_id": "$first_document_id",
"salaries": 1,
"emp_no": 1
}
}
])
它是有效的:)但是像以前一样将_id作为ObjectId之一,将emp_no作为emp_no呢?是的,可以将_id作为ObjectId和emp_no之一。我在回答中编辑了查询。很高兴能为您提供帮助:)