MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

mgo:come aggiornare un array specifico in un documento

Hai scritto questo nel modo sbagliato. La corrispondenza sul valore "id" del magazzino appartiene alla parte "query" dell'estratto conto e non alla sezione "aggiornamento". Pertanto, non vuoi l'UpdateId variante, ma l'Update in quanto consente una più ampia selezione di query:

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)

Tieni inoltre presente che la "dot notation" il modulo va bene qui poiché il tuo selettore per l'elemento dell'array è solo un campo singolare. In genere hai solo bisogno di $elemMatch quando c'è più di un campo nell'array per stabilire la corrispondenza.