在mongodb中提取子文档

在mongodb中提取子文档,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有一个集合,它是聚合查询的结果,并且有具有以下字段结构的文档: { _id : { data1, data2 }, data3 } 我想把它转换成这样的平面结构: { data1, data2, data3 } db.collection.aggregate([ ..., { "$project": { "data1": "$_id.data1",

我有一个集合,它是聚合查询的结果,并且有具有以下字段结构的文档:

{
   _id : { data1, data2 },
   data3
}
我想把它转换成这样的平面结构:

{
   data1,
   data2,
   data3
}
db.collection.aggregate([ ..., 
                          { "$project": { "data1": "$_id.data1",
                                          "data2": "$_id.data2",
                                          "data3": 1 }
                          }
                        ]);
实现这一目标的最佳方式是什么?目前,我想到了另一个聚合查询,但是有没有更简单的方法?

id字段是不可变的,因此您将无法更改它。但是,您可以通过在聚合查询的末尾添加以下$project子句来显示您在_id中拥有的子文档中的值

{ $project: { "data1" : "$_id.data1", "data2": "$_id.data2", "data3": 1 } }
因此,最终的聚合查询如下所示:

{
   data1,
   data2,
   data3
}
db.collection.aggregate([ ..., 
                          { "$project": { "data1": "$_id.data1",
                                          "data2": "$_id.data2",
                                          "data3": 1 }
                          }
                        ]);

这将为您提供所需的平面结构。

在任何情况下,生成的文档都必须具有_id。您不能从原始聚合查询中$unwind结果吗?您是否能够将数据转换为您正在寻找的平面结构?