【问题标题】:Why is Collection.bulkwrite() writes only one document to the mongodb database为什么 Collection.bulkwrite() 只向 mongodb 数据库写入一个文档
【发布时间】:2019-11-11 10:46:35
【问题描述】:

我已经使用 ag-grid 构建了这个网格,我正在尝试通过单击 saveInformation 按钮将其数据批量写入我的 mongodb 数据库中。

app.component.ts

saveInformation() {
    console.log('actionPlanPartiesrowData: ', this.actionPlanPartiesrowData);
    this.saveInformationService
    .saveActionPlanInformation(this.actionPlanPartiesrowData)
    .subscribe((response) => {
          console.log('INSIDE ACTION PLAN COMPONENT INSIDE SUBSCRIBE saveInformation');
          console.log('response: ', response);
    });
}

保存信息.service.ts

  saveActionPlanInformation(actionPlanPartiesrowData
  ) {
    return this.http.post(`${this.uri}/fillActionPlan2`, actionPlanPartiesrowData, {
      responseType: "text"
    });
  }

在后台:

server.js

router.route('/fillActionPlan2').post((req, res) => {
    console.log('REQ.body of action plan is ', req.body);
    res.json('Action Plan data has been received on the server side')
    actionPlanRow.bulkWrite([{
        insertOne: {
            document: req.body[0]
        },
        insertOne: {
            document: req.body[1]
        },
        insertOne: {
            document: req.body[2]
        }
    }]).then(rest => {

        res.json(res.insertedCount, res.modifiedCount, res.deletedCount)
        console.log(rest.insertedCount, rest.modifiedCount, rest.deletedCount);
    });
})

这是后端收到的数据:req.body:

请求正文:

REQ.body of action plan is  [ { project: 'row1 data',
    id: 'row1 data',
    riskId: 'row1 data',
    iso27001: 'row1 data',
    priority: 'row1 data',
    projectOwner: 'row1 data',
    estimatedCost: 'row1 data' },
  { project: 'row 2 data',
    id: 'row 2 data',
    riskId: 'row 2 data',
    iso27001: 'row 2 data',
    priority: 'row 2 data',
    projectOwner: 'row 2 data',
    estimatedCost: 'row 2 data' },
  { id: 'row 3 data',
    project: 'row 3 data',
    riskId: 'row 3 data',
    priority: 'row 3 data',
    iso27001: 'row 3 data',
    projectOwner: 'row 3 data',
    estimatedCost: 'row 3 data*' },
  {},
  {},
  {},
  {},
  {},
  {},
  {},
  {} ]

运行后:

db.actionplanrows.find()

我总是只找到插入的最后一行:

{ "_id" : ObjectId("5d1899417fe11c05ecd9e7eb"), "id" : "row 3 data", "project" : "row 3 data", "riskId" : "row 3 data", "priority" : "row 3 data", "iso27001" : "row 3 data", "projectOwner" : "row 3 data", "estimatedCost" : "row 3 data*" }

我不明白为什么不插入第一行和第二行。为什么只执行最后一个 insertOne()?
谢谢!

【问题讨论】:

    标签: javascript angular mongodb express mongoose


    【解决方案1】:

    我不知道为什么 bulkwrite 只插入最后一个文档。
    我以这种方式使用 insertMany 而不是 bulkwrite 解决了这个问题:

    actionPlanRow.insertMany([req.body[0], req.body[1], req.body[2], req.body[3], req.body[4]], {
        multi: true
    }
    

    希望这对某人有帮助:))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      相关资源
      最近更新 更多