Mongodb $project是否允许将文档JSON中给定字段的所有子字段移动到上层?

Mongodb $project是否允许将文档JSON中给定字段的所有子字段移动到上层?,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我在MongoDB 4.2中收集了如下文档: { "_id": ..., "timestamp" : ISODate(...), "data" : { "field1" : ... , "field2" : ... , ... "fieldN" : ... } 其中N可能相当大(约20个字段) data元素只是一个样板,所以我想去掉它,并将我的文档简化为: { "_id": ..., "ti

我在MongoDB 4.2中收集了如下文档:

{
    "_id": ...,
    "timestamp" : ISODate(...),
    "data" : {
        "field1" : ... ,
        "field2" : ... ,
        ...
        "fieldN" : ...
}
其中N可能相当大(约20个字段)

data
元素只是一个样板,所以我想去掉它,并将我的文档简化为:

{
    "_id": ...,
    "timestamp" : ISODate(...),
    "field1" : ... ,
    "field2" : ... ,
    ...
    "fieldN" : ...
}
使用聚合框架,我可以对
$project
阶段执行以下操作:

db.c.aggregate([
  {$project: {timestamp: 1, field1: "$data.field1", field2: "$data.field1", ..., fieldN: "$data.fieldN"}}
])
此解决方案的问题是,
$project
值可能非常大,聚合查询很长且容易混淆

还有其他更好的选择吗?
$project
是否允许将文档JSON中给定字段的所有子字段移动到上层

谢谢

您可以尝试以下方法:

db.collection.aggregate([
    {
        $replaceRoot: {
            newRoot: {
                $mergeObjects: ["$$ROOT","$data"]
            }
        }
    },
    {
        $project: {
            data: 0
        }
    }
])