Обновить документ с ломтик структур - PullRequest
0 голосов
/ 26 апреля 2019

Попытка обновить документ в MongoDB с помощью официального драйвера mongo, go.mongodb.org / mongo-driver / mongo

это моя структура, которую я хочу обновить

type Activity struct {
    Timestamp    time.Time          `bson:"timestamp,omitempty"`
    Type         string             `bson:"type,omitempty"`
}

type Member struct {
    ID           primitive.ObjectID `bson:"_id,omitempty"`
    Name         string             `bson:"name,omitempty"`
    Activities []Activity           `bson:"activities ,omitempty"`
}

это код для обновления документа

filter := bson.M{"_id": m.ID}
update := bson.M{
    "$set": bson.M{
        "name":        m.Name,
    },
    "$each": bson.M{"activities": m.Activities },
}

res, err := coll.UpdateOne(ctx, filter, update)

имя обновляется, но ничего не происходит с действиями

что я делаю не так? я должен использовать ReplaceOne вместо этого?

1 Ответ

2 голосов
/ 26 апреля 2019

имя обновляется, но ничего не происходит с действиями

Это потому, что $ каждый оператор обновления массива предназначен для использования с $ addToSet (добавить уникальное) или $ push (добавить).

Например, если вы хотите обновить массив без повторяющихся действий, установите:

update := bson.M{
    "$set": bson.M{
        "name": obj.Name,
    },
    "$addToSet": bson.M{"activities": bson.M{"$each": obj.Activities }},
}
cursor, err := collection.UpdateOne(context.Background(), filter, update )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...