Mongodb:为匹配的子元素添加字段

时间:2017-12-05 00:18:56

标签: mongodb

我有这个Mongodb文件

{
    "_id" : ObjectId("5a22e86c64b6d80e384f504a"),
    "ruc" : "20455412215",
    "razon_social" : "EMPRESA A",
    "representantes" : [ 
        {
            "tipo_representante" : "accionista",
            "dni_representante" : "42541773",
            "nombres_representante" : "MARIO PEREZ"
        },
        {
            "tipo_representante" : "accionista",
            "dni_representante" : "42541774",
            "nombres_representante" : "ROBERTO GOMEZ"
        }
    ]
}

我需要将“imagenDNI”:“uploads \ file-1512427693006.png”添加到匹配“dni_representante”的孩子:“42541774”,所以这就是结果:

{
    "_id" : ObjectId("5a22e86c64b6d80e384f504a"),
    "ruc" : "20455412215",
    "razon_social" : "EMPRESA A",
    "representantes" : [ 
        {
            "tipo_representante" : "accionista",
            "dni_representante" : "42541773",
            "nombres_representante" : "MARIO PEREZ"
        },
        {
            "tipo_representante" : "accionista",
            "dni_representante" : "42541774",
            "nombres_representante" : "ROBERTO GOMEZ",
            "imagenDNI": "uploads\file-1512427693006.png"
        }
    ]
}

我试试这段代码

db.getCollection('empresas')
    .update({ "representantes.dni_representante" : "42541773" }
        , {$set: {"representantes.$": { "imagenDNI": 'uploads\file-1512427693006.png' }}})

但它不是添加字段,而是替换整个子字段,显示:

{
    "_id" : ObjectId("5a22e86c64b6d80e384f504a"),
    "ruc" : "20455412215",
    "razon_social" : "EMPRESA A",
    "representantes" : [ 
        {
            "tipo_representante" : "accionista",
            "dni_representante" : "42541773",
            "nombres_representante" : "MARIO PEREZ"
        },
        {
            "imagenDNI": "uploads\file-1512427693006.png"
        }
    ]
}

如何添加字段而不是替换?

1 个答案:

答案 0 :(得分:1)

由于https://docs.mongodb.com/manual/reference/operator/update/positional/#up.S,您应该使用

db.collection.update( { <query selector> },
                      { <update operator>: { "array.$.field" : value } })

所以你可以试试:

db.getCollection('empresas')
.update({ "representantes.dni_representante" : "42541773" }
    , {$set: {"representantes.$.imagenDNI": 'uploads\file-1512427693006.png' }})