首页 > 解决方案 > 为什么 Model.find 不在变量中存储数据?

问题描述

我试图创建和保存新的模型实例,并在我的 MONGODB Atlas 数据库中为每个实例分配一个唯一的 ID。为此,我尝试使用 Model.find() 从我的模型中获取数据并将其存储在一个变量中,我可以在其中循环遍历数组并检查分配的 id 是否已存在于集合对象中。我可以成功记录集合,但似乎我无法将集合数组存储在变量中。

每当我尝试 console.log(dbData) 我得到未定义时,我是否还必须在提交表单时在指向表单操作路径的 get 请求中调用 model.find?

 var formModel=mongoose.model("Form-Model", newFormSchema)


    let dbData =formModel.find({}, function(err,data){
        if(err) console.error(err)
        console.log(data)
        return data
    })

        let rndm=2
        function isUnique(rndm){
          let unique=dbData.some(element=>element.id===rndm)
          while(unique){
            rndm=Math.floor(Math.random()*10000)
            unique=arr.some(element=>element.id===rndm)
          }

         return rndm
        }


    app.post("/form-data",function(req,res){

        console.log(req.body)
        var newForm= new formModel({
            output:req.body.output,
            id:isUnique(rndm)
        })
        newForm.save()
        res.send("new user submited")
        res.end()
    })

编辑//////

我在其他地方看到你需要一个promise或async/await来等待model.find完成获取对象数组但是当console.logging(dbData)我得到promise pending时,

async function dbData() {
try{
let dbData= await formModel.find({})
return dbData
    }
catch(err){
console.log(err)
    }

}
console.log(dbData()) // returns Promise { <pending> }

标签: javascriptmongodbmongoose

解决方案


use .then(function(res) //执行代码并从这里异步函数返回结果)


推荐阅读