MongoDb Почему данные не хранятся в базе данных? - PullRequest
0 голосов
/ 24 июня 2019

У меня есть эта модель mongodb:

  let businessLineDashboardRow = new Schema({
    ref: {
      type: String
    },
    riskstatements: {
      type: String
    },
    maximpact: {
      type: String
    },
    controleffectiveness: {
      type: String
    },
    recommendedriskrating: {
      type: String
    },
    frequency: {
      type: String
    },
    impact: {
      type: String
    },
    validatedreviewriskrating: {
      type: String
    },
    rationalforriskadjustment: {
      type: String
    }
  })

Я начал с простой вставки документа:

db.businesslinedashboards.find ()

{ 
  "_id" : ObjectId("5d10a0a6df45c71a6c9dab26"), 
  "ref" : "R13", "riskstatements" : "blablablablablabla", 
  "maximpact" : "I AM TRYING TO CHANGE THIS VALUE", 
  "controleffectiveness" : "blablablablablabla", 
  "recommendedriskrating" : "blablablablablabla", 
  "frequency" : "blablablablablabla", 
  "impact" : "blablablablablabla", 
  "validatedreviewriskrating" : "blablablablablabla", 
  "rationalforriskadjustment" : "blablablablablabla", "__v" : 0 
}

Как вы, возможно, заметили, я пытаюсь изменить значение maximpact, с помощью этого кода:

 BusinessLineDashboard.findOne({
        ref: 'R13'
    }, (err, rowData) => {
        if (err)
            console.log(err);
        else {
            rowData.maximpact = 'THE DATA GETS STORED IN THE DB SUCCESFULLY'

            console.log('rowData: ', rowData.maximpact);
            //In the console: rowData:  THE DATA GETS STORED IN THE DB SUCCESFULLY
        }
 });

Так что я подумал, что это сработало.Но когда я отправил второй запрос для получения данных таблицы, я заметил, что ничего не изменилось:

function getTableData(dbtable, callback) {
    dbtable.find((err, tableData) => {
        if (err)
            console.log(err);
        else {
            callback(tableData)
        }
    }).then((tableData) => {});
}

getTableData(BusinessLineDashboard, (BLDtable) => {
        BLDtable.forEach(rowData => {
            if(rowData.ref==='R13'){
                console.log('BLDrow: ', rowData.maximpact);
                //In the console: BLDrow:  I AM TRYING TO CHANGE THIS VALUE
            }
        })
})

Так что на самом деле ничего не изменилось.Я думаю, что это как-то связано с асинхронной природой JS.
Есть идеи, почему это происходит и, возможно, как это исправить?
Спасибо !!

1 Ответ

0 голосов
/ 24 июня 2019

Необходимо обновить maximpact в таблице BusinessLineDashboard, соответствующее ref: 'R13'.Без обновления, как вы могли бы изменить значение.

Используйте BusinessLineDashboard.update ({ref: 'R13'}, {maximpact: 'ДАННЫЕ ХРАНЯТСЯ В БД УСПЕШНО'})

...