代码之家  ›  专栏  ›  技术社区  ›  Muirik

使用$addFields向Mongo文档的根添加子属性

  •  1
  • Muirik  · 技术社区  · 7 年前

    我正在创建一个Mongo视图,以便根据需要将数据形状交给前端客户端。最初,我有一个如下所示的文档:

    { 
        "_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 回复  |  直到 7 年前
        1
  •  2
  •   Akrion    7 年前

    这将为您做到:

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

    你可以看到 working here

    $ 因为您正在尝试访问 paymentOption