Как обновить более одного поля MongoDB - PullRequest
0 голосов
/ 08 июля 2019

Я так разочарован Официальной MongoDB для Go.Там действительно нет документации.Я пытаюсь обновить более одного поля в коллекции.Все ссылки, как обычно, являются самыми простыми и обновляют одно поле:

    update := bson.D{bson.E{"$set", bson.E{"releaseimage", r.ReleaseImage}}}

Это работает.Я пытался различными способами расширить это, чтобы установить два поля и получить ошибки:

    update := bson.D{
        {"$set",
            bson.E{"releaseimage", r.ReleaseImage},
            //bson.E{"releasepath", r.ReleasePath},
        },
        // {"$set",
        //  bson.E{
        //      "releasepath", r.ReleasePath}},
    }

первый удалить комментарии в первом наборе.Недопустимый синтаксис для второй попытки удалить комментарии на второй набор.неверный синтаксис.

Я в растерянности.Чтобы продолжить, я делаю два обновления, одно за другим.Неэффективно.

Спасибо.

Ответы [ 2 ]

1 голос
/ 08 июля 2019

Для нескольких полей необходимо создать массив элементов bson (bson.E).затем добавьте / назначьте столько полей, сколько хотите в элементе массива.

var update []bson.E
if r.ReleaseImage != "" {
    update = append(update, bson.E{"releaseimage", r.ReleaseImage})
}
if r.Releasepath != "" {
    update = append(update, bson.E{"releasepath", r.Releasepath})
}
// now update db
result, err := coll.UpdateOne(
        context.Background(),
        bson.D{
            {"id", r.ID},
        },
        bson.D{
            {"$set", update},
            {"$currentDate", bson.D{
                {"updated", true},
            }},
        },
    )

Надеюсь, это поможет

0 голосов
/ 08 июля 2019

Просто сделай так

uQuery := make(bson.M)
if len(r.ReleaseImage)>0{
  uQuery["releaseimage"]=r.ReleaseImage
}
if len(r.Releasepath)>0{
  uQuery["releasepath"]=r.Releasepath
}
updateQ := make(bson.M)
updateQ["$set"] = uQuery

Теперь просто передайте 'updateQ' функции Wrapper обновления mongodb вместе с findQuery

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...