MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

mgo :comment mettre à jour un tableau spécifique dans un document

Vous avez écrit ceci dans le mauvais sens. La correspondance sur la valeur "id" de l'entrepôt appartient à la partie "requête" de votre relevé et non à la section "mise à jour". En tant que tel, vous ne voulez pas que le UpdateId variante, mais la Update car il permet une sélection de requêtes plus large :

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)

Notez également que la "notation par points" form est bien ici car votre sélecteur pour l'élément de tableau n'est qu'un champ singulier. Vous n'avez généralement besoin que de $elemMatch lorsqu'il y a plus d'un champ dans le tableau pour établir la correspondance.