Você escreveu isso ao contrário. A correspondência no valor "id" do armazém pertence à parte "consulta" do seu extrato e não à seção "atualização". Como tal, você não quer o
UpdateId
variante, mas a Update
pois permite uma seleção de consulta mais ampla:query := bson.M{
"_id": bson.ObjectIdHex(productId),
"location.warehouse": bson.ObjectIdHex(warehouseId)
}
update := bson.M{
"$set": bson.M{
"location.$.count": 4
}
}
err := coll.Update(query,update)
Observe também que a "notação de ponto" form está bem aqui, pois seu seletor para o elemento array é apenas um campo singular. Normalmente, você só precisa de
$elemMatch
quando houver mais de um campo na matriz para estabelecer a correspondência.