Bạn đã viết sai cách này xung quanh. Kết quả khớp về giá trị "id" kho thuộc phần "truy vấn" của bảng sao kê của bạn chứ không phải trong phần "cập nhật". Do đó, bạn không muốn UpdateId
biến thể, nhưng Update
vì nó cho phép lựa chọn truy vấn rộng hơn:
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)
Cũng lưu ý rằng "ký hiệu chấm"
ở đây là tốt vì bộ chọn của bạn cho phần tử mảng chỉ là một trường số ít. Bạn thường chỉ cần $elemMatch
khi có nhiều hơn một trường trong mảng để thiết lập đối sánh.