Эта глава рассказывает о том, как обновлять данные документов в Golang MongoDB.
Функции обновления, поддерживаемые MongoDB
- Collection.UpdateOne - Обновляет один отдельный документ
- Collection.UpdateMany - Обновляет данные пакетами
- Collection.ReplaceOne - Заменяет данные
Подготовка тестовых данных
Вставьте пакет данных в коллекцию "coll"
docs := []interface{}{
bson.D{
{"item", "canvas"},
{"qty", 100},
{"size", bson.D{
{"h", 28},
{"w", 35.5},
{"uom", "cm"},
}},
{"status", "A"},
},
...
}
result, err := coll.InsertMany(context.Background(), docs)
Обновление документа
result, err := coll.UpdateOne(
context.Background(), // Получаем параметр контекста
bson.D{ // Устанавливаем критерии запроса для поиска документа с item=paper
{"item", "paper"},
},
bson.D{ // Устанавливаем выражение обновления
{"$set", bson.D{ // Используем оператор $set для установки обновленного содержания поля
{"size.uom", "cm"}, // Изменяем значение size.uom на cm
{"status", "P"}, // Изменяем значение status на P
}},
{"$currentDate", bson.D{ // Используем оператор $currentDate для обновления значения поля lastModified на текущее время
{"lastModified", true},
}},
},
)
Находим документ на основе критериев запроса, а затем обновляем содержимое этого документа.
Совет: Если вы не знакомы с MongoDB, пожалуйста, прочтите руководство по MongoDB.
Массовое обновление документов
UpdateMany отличается от функции UpdateOne в том, что он выполняет массовое обновление соответствующих документов на основе установленных критериев.
result, err := coll.UpdateMany(
context.Background(),
bson.D{ // Установите критерии запроса, qty > 50
{"qty", bson.D{
{"$lt", 50},
}},
},
bson.D{ // Установите обновляемое содержимое
{"$set", bson.D{
{"size.uom", "cm"},
{"status", "P"},
}},
{"$currentDate", bson.D{
{"lastModified", true},
}},
},
)
Замена документа
Запросите указанный документ на основе критериев запроса и замените содержимое документа указанным содержимым.
Совет: Под заменой документа подразумевается полная замена, а не частичное обновление определенных значений полей в документе.
result, err := coll.ReplaceOne(
context.Background(),
bson.D{ // Установите критерии запроса, item=paper
{"item", "paper"},
},
bson.D{ // Установите новое содержимое документа
{"item", "paper"},
{"instock", bson.A{
bson.D{
{"warehouse", "A"},
{"qty", 60},
},
bson.D{
{"warehouse", "B"},
{"qty", 40},
},
}},
},
)
Сначала, на основе критериев запроса, найдите документ с item=paper, затем замените его указанным новым содержимым.