Estoy escribiendo datos masivos en monogdb usando golang. Supongamos que tenemos los siguientes datos
[ { id:1, name:"abc" } { id:2, name:"cde" } ....upto 1000 ]para guardar estos datos, estoy haciendo una operación de escritura masiva en esto usando el siguiente código
mongoSession, ctx := config.ConnectDb("myFirstDatabase") defer mongoSession.Disconnect(ctx) var operations []mongo.WriteModel operationA := mongo.NewInsertOneModel() getCollection := mongoSession.Database("myFirstDatabase").Collection("transactions") for k, v := range transaction { operationA.SetDocument(transaction[k]) operations = append(operations, operationA) fmt.Println(operationA) } bulkOption := options.BulkWriteOptions{} // bulkOption.SetOrdered(true) _, err = getCollection.BulkWrite(ctx, operations, &bulkOption) operations son del tipo []mongo.WriteModel en for loop. Estoy agregando el único documento único a las operaciones, pero por otro lado, cuando verifico en mongodb que todos los documentos están allí, solo hay un último documento escrito 1000 veces. en mongodb. Indique qué código de línea es incorrecto en el fragmento anterior.
¡Gracias por adelantado!
Está haciendo referencia a la misma variable y actualizándola nuevamente, por lo que después de la iteración, solo tiene los últimos registros * la cantidad de veces que se ejecutó el ciclo.
operationA.SetDocument(transaction[k]) establecerá el valor nuevamente n nuevamente en la misma variable, lo que dará como resultado que solo se use el último valor. operations = append(operations, operationA)
for k, v := range transaction { var operationA := mongo.NewInsertOneModel() // create variable with local scope to fix the issue operationA.SetDocument(transaction[k]) operations = append(operations, operationA) fmt.Println(operationA) }