Napisałeś to w niewłaściwy sposób. Dopasowanie wartości „id” magazynu należy do części „zapytanie” wyciągu, a nie do sekcji „aktualizacja”. W związku z tym nie chcesz UpdateId
wariant, ale Update
ponieważ umożliwia szerszy wybór zapytań:
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)
Pamiętaj też, że "notacja z kropkami"
formularz jest tutaj w porządku, ponieważ selektor elementu tablicy jest po prostu pojedynczym polem. Zazwyczaj potrzebujesz tylko $elemMatch
gdy w tablicy jest więcej niż jedno pole, aby ustalić dopasowanie.