使用' findAndModify'在多个嵌套数组中的mongodb(复杂)

时间:2014-11-20 15:35:35

标签: mongodb mongodb-query nosql

我在集合中有下一个文档:

{
    "_id" : ObjectId("546a7a0f44aee82db8469f6d"),
    ...
    "valoresVariablesIterativas" : [ 
        {
            "asignaturaVO" : {
                "_id" : ObjectId("546a389c44aee54fc83112e9")
            },
            "valoresEstaticos" : {
                "IT_VAR3" : "",
                "IT_VAR1" : "",
                "IT_VAR2" : "asdasd"
            },
            "valoresPreestablecidos" : {
                "IT_ASIGNATURA" : "Matemáticas",
                "IT_NOTA_DEFINITIVA_ASIGNATURA" : ""
            }
        }, 
        {
            "asignaturaVO" : {
                "_id" : ObjectId("546a3d8d44aee54fc83112fa")
            },
            "valoresEstaticos" : {
                "IT_VAR3" : "",
                "IT_VAR1" : "",
                "IT_VAR2" : ""
            },
            "valoresPreestablecidos" : {
                "IT_ASIGNATURA" : "Español",
                "IT_NOTA_DEFINITIVA_ASIGNATURA" : ""
            }
        }
    ]
    ...
}

我想修改valoresEstaticos的元素,我知道字段“_id”,“asignaturaVO”,以及我要修改的项目valoresEstaticos的关键字。

这是对此的正确查询?我有这个:

db.myCollection.findAndModify({
    query:{"_id" : ObjectId("546a7a0f44aee82db8469f6d")},
    update: { 
              {valoresVariablesIterativas.asignaturaVO._id:    ObjectId("546a389c44aee54fc83112e9")},
              { $set: {}}
    }
})

但我不知道如何构建查询:(

请帮助我,非常感谢!

1 个答案:

答案 0 :(得分:0)

您可以使用update

db.myCollection.update(
    { "_id" : ObjectId("546a7a0f44aee82db8469f6d"), "valoresVariablesIterativas.asignaturaVO._id" : ObjectId("546a389c44aee54fc83112e9") },
    { "$set" : { "valoresVariablesIterativas.$.valoresEstaticos.IT_VAR3" : 99 } }
)

假设您要更新密钥IT_VAR3。关键是positional update operator $。更新的查询部分中的数组上的条件对于查找文档是多余的,但是必须使用$来更新正确的数组元素。