【问题标题】:MongoDb Why isn't the data being stored in the database?MongoDb 为什么数据没有存储在数据库中?
【发布时间】:2019-11-06 03:19:08
【问题描述】:

我有这个 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 的异步特性有关。
知道为什么会发生这种情况以及如何解决吗?
谢谢!!

【问题讨论】:

  • IIRC,你不能both传递回调并期望返回一个promise。

标签: javascript mongodb asynchronous promise callback


【解决方案1】:

您必须更新 BusinessLineDashboard 表中对应于 ref: 'R13' 的 maximpact。如果没有更新,你怎么能改变这个值。

使用 BusinessLineDashboard.update({ref: 'R13'},{maximpact : '数据成功存储在数据库中'})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    相关资源
    最近更新 更多