Use
$addToSet
em vez de $push
. db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 6.0, "score": 8.0}, "play": {"wk": 6.0, "score": 8.0} } }
)
EDITAR:
Não há uma abordagem interna simples para atualização condicional de subdocumento em um campo de matriz, por propriedade específica. No entanto, um pequeno truque pode fazer o trabalho executando dois comandos em sequência.
Por exemplo:Se quisermos atualizar os
quizzes
campo com o objeto { "wk": 7.0, "score": 8.0 }
, podemos fazer isso em duas etapas:Etapa 1:
$pull
retirar subdocumentos dos quizzes
array onde "wk": 7.0
. (Nada acontece se o subdocumento correspondente não for encontrado ). db.push.update(
{ _id: 5 },
{ $pull: { "quizzes": { "wk": 7.0 } } }
)
Etapa 2:
$addToSet
o subdocumento. db.push.update(
{ _id: 5 },
{ $addToSet: { "quizzes": {"wk": 7.0, "score": 8.0} } }
)
Você pode combinar os dois comandos de atualização acima usando o
bulk.find().update()