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()