Как BulkWrite \ UpdateMany с драйвером Go для MongoDB

Я перехожу с драйвера mgo, и моя функция выглядит так:

queue := collection.Bulk()
for j := range changes {
    ..
    queue.Update(doc, update)
}
saveResult, err := queue.Run()

Это делает некоторые обновления $push и $set в одном документе в цикле. Как это сделать с официальным драйвером? Это collection.BulkWrite() или collection.UpdateMany()? Документация настолько расплывчата, что я не понимаю, как их использовать и в чем разница. Любая помощь будет оценена по достоинству.

Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
6
0
4 780
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Для вашего варианта использования вы должны использовать collection.BulkWrite. Вы можете найти примеры использования go-mongo-driver в каталог примеров репозитория.

collection.UpdateMany() обновит несколько документов в коллекции, используя один и тот же фильтр обновления и модификации. В документы эквивалента оболочки mongo гораздо больше документации. Пример:

result, err := coll.UpdateMany(
    context.Background(),
    bson.NewDocument(
        bson.EC.SubDocumentFromElements("qty",
            bson.EC.Int32("$lt", 50),
        ),
    ),
    bson.NewDocument(
        bson.EC.SubDocumentFromElements("$set",
            bson.EC.String("size.uom", "cm"),
            bson.EC.String("status", "P"),
        ),
            bson.EC.SubDocumentFromElements("$currentDate",
            bson.EC.Boolean("lastModified", true),
        ),
    ),
)

collection.BulkWrite() выполнит набор операции массовой записи. Несколько дней назад BulkWrite API был только представил для драйвера go. Есть небольшие примеры, но вы всегда можете проверить тесты файлы. Пример:

var operations []mongo.WriteModel

operation := mongo.NewUpdateOneModel()
operation.Filter(bson.NewDocument(
    bson.EC.SubDocumentFromElements("qty",
        bson.EC.Int32("$lt", 50),
    ),
))
operation.Update(bson.NewDocument(
    bson.EC.SubDocumentFromElements("$set",
        bson.EC.String("size.uom", "cm"),
        bson.EC.String("status", "P"),
    ),
    bson.EC.SubDocumentFromElements("$currentDate",
        bson.EC.Boolean("lastModified", true),
    ),
))

operations = append(operations, operation)

result, err := coll.BulkWrite(
    context.Background(),
    operations,
)

Большое, большое спасибо! Похоже, я решил мигрировать, когда это станет возможным. Сам того не зная)

Dennis S 28.10.2018 10:42

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