Как я могу обновить и конкретное поле вложенной структуры в MongoDB с помощью golang, используя bson

#mongodb #go

#mongodb #Вперед

Вопрос:

Это то, чего я пытаюсь достичь:

bson.M{constants.MONGO_SET: entity.UserShop{Shop.ID: userShop.Shop.ID}}

вместо этого используя

bson.M{constants.MONGO_SET: entity.UserShop{"shop._id": userShop.Shop.ID}}

будучи

 type UserShop struct {
  User `json:"-"  bson:"-"`
  Shop `json:"shop,omitempty"  bson:"shop,omitempty"`
}
  

и магазин

 type Shop struct {
    ID          primitive.ObjectID `json:"-" bson:"_id,omitempty"`
    Name        string             `json:"name,omitempty" bson:"name,omitempty"`
    Description string             `json:"description,omitempty" bson:"description,omitempty"`
    ImageURL    string             `json:"imageURL,omitempty" bson:"imageURL,omitempty"`
    Stars       int64              `json:"stars,omitempty" bson:"stars,omitempty"`
    // Location    *[]int64           `json:"location,omitempty" bson:"location,omitmepty"`
    // Products    *AllProducts       `json:"products,omitempty" bson:"products,omitempty"`
}
  

В структуре базы данных :

Магазин:{ _id: «12344», имя: «привет» }

Я хочу изменить какое-либо конкретное поле и не изменять какое-либо другое поле внутри объекта shop

Ответ №1:

Используйте следующее выражение для обновления только shop._id поля:

 bson.M{"$set":bson.M{"shop._id":userShop.Shop.ID}}
  

Комментарии:

1. Я просто хочу избежать использования строки «shop._id», задаваясь вопросом, есть ли способ добиться такого же поведения с использованием данной структуры.

2. Данная структура имеет поле int64, которое всегда будет добавлено к выражению. Вы можете определить отдельную структуру, содержащую только поле _id, если хотите.