MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

mgo:wie man ein bestimmtes Array in einem Dokument aktualisiert

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.