MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Atualize o elemento na matriz, se existir, caso contrário, insira um novo elemento nessa matriz no MongoDb


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