sql >> Base de Datos >  >> NoSQL >> MongoDB

Actualice el elemento en la matriz si existe; de ​​lo contrario, inserte un nuevo elemento en esa matriz en MongoDb

Usa $addToSet en lugar de $push .

db.push.update(
    { _id: 5 },
    { $addToSet: { "quizzes": {"wk": 6.0, "score": 8.0}, "play": {"wk": 6.0, "score": 8.0} } }
)

EDITAR:

No existe un enfoque integrado simple para la actualización condicional de subdocumentos en un campo de matriz, por propiedad específica. Sin embargo, un pequeño truco puede hacer el trabajo ejecutando dos comandos en secuencia.

Por ejemplo:si queremos actualizar los quizzes campo con el objeto { "wk": 7.0, "score": 8.0 } , podemos hacerlo en dos pasos:

Paso 1: $pull sacar subdocumentos de los quizzes matriz donde "wk": 7.0 . (No sucede nada si no se encuentra el subdocumento coincidente ).

db.push.update(
    { _id: 5 },
    { $pull: { "quizzes": { "wk": 7.0 } } }
)

Paso 2: $addToSet el subdocumento.

db.push.update(
    { _id: 5 },
    { $addToSet: { "quizzes": {"wk": 7.0, "score": 8.0} } }
)

Puede combinar los dos comandos de actualización anteriores usando bulk.find().update()