MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

mgo:como atualizar um array específico em um documento


Você escreveu isso ao contrário. A correspondência no valor "id" do armazém pertence à parte "consulta" do seu extrato e não à seção "atualização". Como tal, você não quer o UpdateId variante, mas a Update pois permite uma seleção de consulta mais ampla:
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)

Observe também que a "notação de ponto" form está bem aqui, pois seu seletor para o elemento array é apenas um campo singular. Normalmente, você só precisa de $elemMatch quando houver mais de um campo na matriz para estabelecer a correspondência.