Das hast du falsch herum geschrieben. Die Übereinstimmung mit dem Warehouse-ID-Wert gehört in den Abschnitt „Abfrage“ Ihrer Anweisung und nicht in den Abschnitt „Aktualisierung“. Daher möchten Sie die UpdateId
nicht Variante, sondern das Update
da es eine breitere Abfrageauswahl ermöglicht:
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)
Beachten Sie auch die "Punktnotation"
Form ist hier in Ordnung, da Ihr Selektor für das Array-Element nur ein einzelnes Feld ist. Normalerweise benötigen Sie nur $elemMatch
wenn es mehr als ein Feld im Array gibt, um die Übereinstimmung herzustellen.