Para artículos nuevos
db.cmpe285.update({"username":username}, {"$push": {"stocks":{"name":stock_symbol,"count":allotment,"price":initial_share_price}}})
Para actualizar elementos existentes , asumiendo que está actualizando la asignación. debe utilizar el operador posicional ($) con el valor de matriz al que se hace referencia en la consulta.
db.cmpe285.update({"username":username, "stocks.name":stock_symbol}, {"$set": {"stocks.$.count":allotment2}})
Para alterar elementos , es un proceso de 2 pasos. Primero deberá ejecutar la consulta de la misma manera que lo hace para actualizar los elementos existentes como se indicó anteriormente e inspeccionar la respuesta del resultado de escritura de la consulta anterior y verificar el recuento modificado. Si el recuento de modificaciones es 0, significa que debemos actualizar y luego lo hará como en el caso de agregar nuevos elementos.
db.cmpe285.update({"username":username, "stocks.name":stock_symbol}, {"$set": {"stocks.$.count":allotment2}})
Compruebe WriteResult , si nmodificado es igual a 0.
db.cmpe285.update({"username":username}, {"$push": {"stocks":{"name":stock_symbol,"count":allotment2,"price":initial_share_price}}})
Si nmodified es igual a 1, la inserción se realizó correctamente.