Изменить или создать в зависимости от логического значения

У меня есть объекты в моей коллекции, которые могут содержать логическую переменную, называемую проверенной, или нет.

Если у него есть эта переменная и она ложна, я хочу установить для нее значение true.

Если у него нет этой переменной, я хочу создать ее как истинную.

query := bson.D{{Key: "email", Value: email}}
update := bson.D{
    {Key: "$set",
        Value: bson.D{
            {Key: "verified", Value: true},
        },
    },
}
 

err := col.Collection("objects").FindOneAndUpdate(context.Background(), &query, &update).Err()

Я пытался:

    upsert := true
    opts := options.FindOneAndUpdateOptions{
        Upsert: &upsert,
    }

    filter := bson.D{{Key: "email", Value: email}}
    query := bson.D{
        {Key: "$set",
            Value: bson.D{
                {Key: "verified", Value: true},
            },
        },
    }

 err := col.Collection("objects").FindOneAndUpdate(context.Background(), &filter, &query, &opts).Err()

Но он не устанавливает проверенное значение true, если проверенное значение не существует. И даже если он существует и является ложным, он все равно не установлен в значение true.

Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
1
0
391
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

как насчет использования upsert: true?

вверху:

  • Создает новый документ, если нет документов, соответствующих фильтру. Обновляет документ. единственный документ, соответствующий фильтру.

попробуйте передать upsert:true в findOneAndUpdate()

Но весь этот объект уже существует, я просто хочу создать внутри него переменную, если значение не существует, или установить для нее значение true, если значение ложно?

Henry 10.12.2020 17:37

также, где бы я установить это? Спасибо. неизвестное поле 'upsert' в структурном литерале типа примитив.E

Henry 10.12.2020 17:43

вы можете передать его как необязательный параметр

debugmode 10.12.2020 18:16

Я обновил свой ответ, чтобы добавить новую информацию, спасибо

Henry 10.12.2020 18:18

Другие вопросы по теме