使用$ addFields将子属性添加到Mongo文档的根目录

时间:2018-11-07 15:43:41

标签: mongodb aggregation-framework

我正在创建一个Mongo视图n,以便根据需要向前端客户端提供数据形状。最初我有一个看起来像这样的文档:

{ 
    "_id" : <value>, 
    "region" : "Midwest", 
    "dob" : ISODate("1989-07-21T05:00:00.000+0000"), 
    "paymentOption" : {
        "_id" : <value>, 
        "anotherProp" : <value>
        "coverage" : {
                "status" : "active", 
                "coverageEnd" : ISODate("2020-07-31T00:00:00.000+0000"), 
                "coverageStart" : ISODate("2018-08-01T00:00:00.000+0000"), 
        },
    }
}

......,我要做的是从“ paymentOption”中获取“ coverage”,并将其放在文档的根目录中,并命名为“ coverage”,然后删除“ paymentOption”。

为此,我尝试了以下操作:

$addFields: {
   "coverage" : { "paymentOption.coverage" : {$exists: true} }
}

...但是会产生错误:

  

无效的$ addFields规范:不能使用点分隔的字段名

如何更改此操作以生成此文档?

{ 
    "_id" : <value>, 
    "region" : "Midwest", 
    "dob" : ISODate("1989-07-21T05:00:00.000+0000"), 
    "coverage" : {
                 "status" : "active", 
                 "coverageEnd" : ISODate("2020-07-31T00:00:00.000+0000"), 
                 "coverageStart" : ISODate("2018-08-01T00:00:00.000+0000"), 
    }
}

1 个答案:

答案 0 :(得分:1)

这将为您做到:

db.collection.aggregate([
  {
    $addFields: {
      "coverage": "$paymentOption.coverage"
    }
  },
  {
    $project: {
      paymentOption: 0
    }
  }
])

您可以看到它working here

由于尝试访问$字段,您会发现缺少paymentOption运算符。