Как 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()? Документация настолько расплывчата, я заблудился о том, как использовать их оба и в чем разница. Любая помощь будет оценена.

1 ответ

Решение

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

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

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,
)
Другие вопросы по тегам