Du skrev detta på fel sätt. Matchningen på lagrets "id"-värde hör hemma i "query"-delen av ditt uttalande och inte i "update"-avsnittet. Som sådan vill du inte ha UpdateId
variant, men Update
eftersom det tillåter ett bredare urval av frågor:
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)
Observera också att "punktnotationen"
form är bra här eftersom din väljare för arrayelementet bara är ett singulärt fält. Du behöver vanligtvis bara $elemMatch
när det finns mer än ett fält i arrayen för att fastställa matchningen.