Как 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,
)