Как BulkWrite \ UpdateMany с драйвером Go для MongoDB - PullRequest
0 голосов
/ 27 октября 2018

Я мигрирую из драйвера mgo, и моя функция выглядит следующим образом:

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

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

1 Ответ

0 голосов
/ 28 октября 2018

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

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,
)
...