为了账号安全,请及时绑定邮箱和手机立即绑定

大容量写入时输入的数据错误

大容量写入时输入的数据错误

Go
米脂 2022-08-15 19:43:19
我正在使用golang将批量数据写入monogdb。假设我们有以下数据[ {   id:1,   name:"abc" } {  id:2,  name:"cde" } ....upto 1000]为了保存此数据,我正在使用以下代码对此进行批量写入操作mongoSession, ctx := config.ConnectDb("myFirstDatabase")defer mongoSession.Disconnect(ctx)var operations []mongo.WriteModeloperationA := 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是 for 循环的类型,我将单个文档附加到操作中,但另一方面,当我在 mongodb 中验证所有文档都在那里时,只有最后一个文档在 mongodb 中写入了 1000 次。请让我知道上面的代码片段中的哪个行代码是错误的。[]mongo.WriteModel
查看完整描述

1 回答

?
慕仙森

TA贡献1827条经验 获得超7个赞

您正在引用同一个变量并再次更新它,因此在迭代后,您只有最后一条记录 * 循环运行的次数。


operationA.SetDocument(transaction[k])将再次将值n再次设置为同一变量,结果仅使用最后一个值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)

}


查看完整回答
反对 回复 2022-08-15
  • 1 回答
  • 0 关注
  • 128 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信