Как использовать mongo.Collection.BulkWrite ()?
Этот пример кода основан на драйвере MongoDB Go v1.1.2. Сначала вам нужно импортировать следующее:
"go.mongodb.org/mongo-driver/mongo/options"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/bson"
А ниже приведен пример кода для Collection.BulkWrite и используется ваш пример структуры User
:
collection := client.Database("databaseName").Collection("collectionName")
var operations []mongo.WriteModel
// Example using User struct
userA := User{AccountId:"1", Name:"John", FamilyName:"Smith", EmailAddress:"john@example.org"}
operationA := mongo.NewUpdateOneModel()
operationA.SetFilter(bson.M{"AccountId": userA.AccountId})
operationA.SetUpdate(bson.M{"Name":userA.Name,
"FamilyName":userA.FamilyName,
"EmailAddress":userA.EmailAddress})
// Set Upsert flag option to turn the update operation to upsert
operationA.SetUpsert(true)
operations = append(operations, operationA)
// Example using bson.M{}
operationB := mongo.NewUpdateOneModel()
operationB.SetFilter(bson.M{"AccountId":2})
operationB.SetUpdate(bson.M{"Name":"Jane",
"FamilyName":"Smith",
"EmailAddress":"jane@example.org"})
operationB.SetUpsert(true)
operations = append(operations, operationB)
// Specify an option to turn the bulk insertion in order of operation
bulkOption := options.BulkWriteOptions{}
bulkOption.SetOrdered(true)
result, err := collection.BulkWrite(context.TODO(), operations, &bulkOption)
if err != nil {
log.Fatal(err)
}
fmt.Println(result)
Для получения дополнительной информации см .:
Как монго решает, что нового, что старое и что нужно обновить?
Если документ не соответствует критериям запроса (фильтр), тогда update()
вставляет один документ. Если есть документы, которые соответствуют критериям запроса, это становится обновлением. См. Также Upsert Behavior для получения дополнительной информации.
Если критерии запроса на обновление содержат _id
с точечной нотацией , см. Upsert With Dotted _id
Запрос .