sexta-feira, 20 de janeiro de 2017

MongoDB - Como fazer update utilizando valor da coluna para cálculo

No MongoDB, para fazer o update em uma tabela utilizando o valor da coluna para cálculo do novo valor,  é necessário fazer o update registro por registro, através de um looping (forEach)


No exemplo abaixo, eu precisava utilizar um carrinho de compras, trocando o código do produto de 999 para 888. E precisava multiplicar a quantidade atual por 2.


No update simples, isso não é possível, eu consigo apenas setar um valor fixo, não consigo fazer cálculo utilizado o valor atual da coluna.


Segue a solução: 


TableYourTable

Primary Key: userId e Product

Set

Product = 888

Quantity = Quantity x 2



db.YourTable.find({Product: "999"}).forEach( function(cursor) {
     db.YourTable.update({$and: [ {"userId": cursor.userId}, {"Produto": cursor.Product} ]}   //-- Where
              , {$set:{"Product":"888", "quantity": cursor.quantity* 2) } }  //-- Set
  , {multi:true})

});